验证二叉树的小问题

时间:2013-03-24 07:28:39

标签: c++ recursion binary-tree compiler-warnings binary-search-tree

我编写了这个递归函数,它按预期工作。它验证二叉树,即它检查给定的二叉树是否是二叉搜索树,并给出正确的答案。

但是,我收到编译器警告说:

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()));
    }
}

2 个答案:

答案 0 :(得分:2)

在这些部分:

}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());
    }

请注意,您只在这两种情况下返回?这就是警告告诉您的,代码可以采用的路径没有显式包含带有值的return。如果遇到代码没有明确return这样做的情况,这可能会导致奇怪的问题。

使警告静音的最简单方法是在功能结束时添加return false

答案 1 :(得分:2)

你写了一个函数,它在所有真正的选项上都返回true,但是没有返回false。

看起来最后返回false将是正确的结果以及修复警告。