我试图遵循递归(有序遍历)isBST函数的具体实现。
我尝试使用简单的无效BST示例来模拟它: root = 5,root.left = 3,root.left.right = 8
5
/
3
\
8
我得到的都是'是真的'或者' false'但无需检查最后一个节点' 8'。 代码如下:
/* wrapper that keeps track of the previous value */
class PrevWrapper {
int data = Integer.MIN_VALUE;
}
boolean isBST(Node root, PrevWrapper prev) {
/* base case: we reached null*/
if (root == null) {
return true;
}
if(!isBST(root.left, prev)) {
return false;
}
/* If previous in-order node's data is larger than
* current node's data, BST property is violated */
if (prev.data > root.data) {
return false;
}
/* set the previous in-order data to the current node's data*/
prev.data = root.data;
return isBST(root.right, prev);
}
boolean isBST(Node root) {
return isBST(root, new PrevWrapper());
}
返回递归调用的正确顺序是什么?
修改:
我在想: (#)isBST(5,min),isBST(3,min),isBST(3.left = null,min) - 返回true,跳到prev = 3,isBST(8,3),isBST(8.left = null,3) - 返回true,跳到prev = 8,isBST(8.right = null,8) - 返回true到(#),检查8> 5?返回false 。
我想我明白了,这是正确的通话顺序吗? 提前谢谢。