检查二叉树的根中是否存储的数字大于所有子节点中的数字

时间:2014-06-03 15:44:24

标签: c binary-tree

如果此功能是bool,将会有所帮助。当我尝试这个时,函数只返回false。

bool compare(tree *root,tree *root2){ 

if(root==NULL) return false;

    return((root->number <= root2->number) && compare(root->left, root2) 
                                           && compare(root->right, root2));
}

因此,root2不会改变值,它仅用于比较根数和其他所有值。

2 个答案:

答案 0 :(得分:1)

在基本情况下将false更改为true

if(root==NULL) return true;

这是因为,如果任何节点为NULL,则它的父节点满足父节点值大于子节点值的属性(因为在这种情况下没有子节点)。所以回归真实。

另外,预先检查root2是否为NULL。

答案 1 :(得分:1)

假设您有一个合理的树,下面的代码段在某些时候总是返回false。既然你正在使用顶级比较,那也是错误的。

&& compare(root->left, root2) && compare(root->right, root2)

分支的这一部分最终总是假的原因是第一个声明:

if(root==NULL) return false;

我认为您希望查看root2,而不是root

所以,改成它:

if(root2==NULL) return false;

然后在下面你可以与root进行比较,但事实恰恰相反。

if(root==NULL) return true;

如果root2为null(null不大于任何值),则返回false;如果root为null(一切都大于null),则返回true。