如何遵循递归的isBST函数?

时间:2014-12-11 22:30:11

标签: recursion binary-search-tree

我试图遵循递归(有序遍历)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

我想我明白了,这是正确的通话顺序吗? 提前谢谢。

0 个答案:

没有答案