gpt4 book ai didi

c++ - 在递归函数中抛出错误

转载 作者:搜寻专家 更新时间:2023-10-31 01:45:07 24 4
gpt4 key购买 nike

我有一个二叉树,在下面的函数中,我使用递归将其打印出来:

void printTree(node *root){
if(root!=NULL){
printTree(root->leftSon);
cout<<root->key<<" ";
printTree(root->rightSon);
}
}

它工作正常,但问题是当树为空时我找不到抛出错误的方法。我试图通过添加另一个 if 语句来解决这个问题:

void printTree(node *root) throw(runtime_error){
if(root==NULL) {
throw runtime_error("Tree is empty");
}

if(root!=NULL){
printTree(root->leftSon);
cout<<root->key<<" ";
printTree(root->rightSon);
}
}

但话又说回来,最终 root 在到达树的末尾时将始终设置为 NULL,因此此函数将始终抛出错误。如何在第一次调用函数时设置一个条件来检查 root 是否在开始时为 NULL?

最佳答案

您可以通过多种方式完成您的要求。其中之一是:

static void printTree_implementation(node *root) {
... do whatever you're already doing without the exception
}

void printTree(node *root) throw(runtime_error){
if(root==NULL) {
throw runtime_error("Tree is empty");
}
printTree_implementation(root);
}

目的是 printTree_implementation() 只能printTree() 调用,所以你知道你有错误检查在实现之外进行管理。通过将实现设为静态,您可以限制函数的调用方式。

如果你用一个类来解决这个问题,你可以使实现成为一个private方法。

关于c++ - 在递归函数中抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22561087/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com