判断树是否是二叉搜索树

  public boolean isValidBST(TreeNode root) {
        int[] minmax = new int[2];
        return isBST(root, minmax);
    }

    public boolean isBST(TreeNode root, int[] minmax) {
        if (root == null) { // 空树也算是 BST
            return true;
        }
        if (root.left == null && root.right == null) {
            minmax[0] = root.val;
            minmax[1] = root.val;
            return true;
        }

        // 当左子树为空时,以root为根的树的 minLeft maxLeft 的值
        int minLeft = root.val;
        int maxLeft = root.val;

        boolean result = true;
        if (root.left != null) {
            result = isBST(root.left, minmax);
            if (!result) return false;        // 左子树都不是 BST了,直接返回
            minLeft = minmax[0];
            maxLeft = minmax[1];
            // 比左子树最大值小
            if (root.val <= maxLeft) {
                return false;
            }
        }

        // 当右子树为空时,minRight、maxRight的值
        int minRight = root.val;
        int maxRight = root.val;

        if (root.right != null) {
            result = isBST(root.right, minmax);
            if (!result) return false;        // 右子树都不是 BST了,直接返回

            minRight = minmax[0];
            maxRight = minmax[1];
            if (root.val >= minRight) {
                return false;
            }
        }

        // 还能到达者说明是 BST 了
        minmax[0] = minLeft;
        minmax[1] = maxRight; // 更改以节点 root 为BST的最小值、最大值
        return true;
    }

你可能感兴趣的:(判断树是否是二叉搜索树)