如果此功能是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不会改变值,它仅用于比较根数和其他所有值。
答案 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。