boolean checkBST(Node root) {
return check(root, 10001, 0);
}
boolean check(Node root, int value1, int value2) {
if (root != null) {
if (root.data >= value1 || root.data <= value2) {
return false;
} else {
return check(root.left, root.data, value1) & check(root.right, value2, root.data); //line 13
}
} else {
return true;
}
}
请说明在给定的调用中value1和value2如何变化 二叉树是
3
/ \
5 4
/ \
1 4
答案 0 :(得分:0)
在行check(root.left,root.data,0) & check(root.right,10001,root.data)
上,您递归地调用check
并使用与期望的0和10001不同的参数。忽略Node
参数,第一个调用使用root.data
和{ {1}},第二个使用0
和10001
。让我们考虑root.data
。您期望check(root.left,root.data,0)
始终等于value2
,但事实并非如此。您可以在同一行上看到,您也将0
称为check
。如您所见,check(root.right,10001,root.data)
作为root.data
的参数传递,这意味着如果不是value2
,则您在所进行的调用中更改了0
的值。这意味着下一个value2
调用可能与check(root.left,root.data,0)
具有不同的值,因此行value2
和check(root.left,root.data,0)
不相等。
如果这不能解决您的问题,请进行编辑以使其更清楚,因为很难理解您的问题是什么。
TL; DR-使用check(root.left,root.data,value2)
时,您正在更改check(root.right,10001,root.data)
,因此不再是value2
。 0
同样适用。