【发布时间】:2013-03-24 07:28:38
【问题描述】:
我编写了这个递归函数,它按预期工作。它验证二叉树,即检查给定的二叉树是否是二叉搜索树,并给出正确的答案。
但是,我收到编译器警告:
Control may reach end of non-void function
我知道这个错误是什么意思:函数应该返回一个bool 而不仅仅是在函数结束时脱落。我只是不知道如何克服它,因为它确实返回了 bool。
我试图搜索递归时可能忽略的内容,但无济于事。
bool isBSTRecursively(Node * root){
if (!root) {
return true;
}else if (!root->getLeft() && !root->getRight()){
return true;
}else if(!root->getLeft()){
if (root->getRight()->getData() > root->getData()) {
return isBSTRecursively(root->getRight());
}
}else if (!root->getRight()){
if (root->getLeft()->getData() < root->getData()) {
return isBSTRecursively(root->getLeft());
}
}else{
return (isBSTRecursively(root->getLeft()) && isBSTRecursively(root->getRight()));
}
}
【问题讨论】:
-
非唯一数据呢?我的意思是,一个节点及其两个子节点中的任何一个(或两者)可能具有与节点中相同的数据,并且不会违反树的排序性。你的代码能处理这种情况吗?
-
另外,循环怎么样,让你的树变成一个图?你也想看看吗?
-
@AlexeyFrunze,你是对的。感谢您引起我的注意。我也会尝试结合这些条件。
标签: c++ recursion binary-tree compiler-warnings binary-search-tree