递归调用方法

时间:2018-07-21 03:07:59

标签: java recursion binary-tree

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

1 个答案:

答案 0 :(得分:0)

在行check(root.left,root.data,0) & check(root.right,10001,root.data)上,您递归地调用check并使用与期望的0和10001不同的参数。忽略Node参数,第一个调用使用root.data和{ {1}},第二个使用010001。让我们考虑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)具有不同的值,因此行value2check(root.left,root.data,0)不相等。

如果这不能解决您的问题,请进行编辑以使其更清楚,因为很难理解您的问题是什么。

TL; DR-使用check(root.left,root.data,value2)时,您正在更改check(root.right,10001,root.data),因此不再是value20同样适用。