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

C 函数,用于检查二叉树的根中是否存储了大于所有子节点中的数字,c,binary-tree,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) &

如果此函数为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));
}
bool比较(tree*root,tree*root2){
if(root==NULL)返回false;
返回((根->数字)&&compare(根->左,根2)
&&比较(根->右,根2));
}

因此,root2不会更改值,它的存在只是为了将根数与所有其他根数进行比较。

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

if(root==NULL) return true;
这是因为,如果任何节点为NULL,则其父节点满足父节点的值大于子节点的值的属性(因为在这种情况下没有子节点)。因此,请返回true


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

假设您有一个外观合理的树,下面的代码段在某个时候将始终返回false。因为你正在和你的最高水平的比较,这将是错误的

&& compare(root->left, root2) && compare(root->right, root2)
分支机构的这一部分最终总是错误的原因是第一个陈述:

if(root==NULL) return false;
我想你希望看到的是根2,而不是根

因此,将其更改为:

if(root2==NULL) return false;
在这下面,你可以和根比较,但事实恰恰相反

if(root==NULL) return true;

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

什么是“它不工作”?它会崩溃吗?有时它会给你错误的答案吗?它总是给你错误的答案吗?您是否在调试器中对其进行了检查,以查看哪个部分正在崩溃或给出了错误的答案?它给出了错误的结果。我马上就要编辑了。