这段代码的堆栈空间是多少?

时间:2015-09-02 16:23:30

标签: binary-search-tree

问题是检查树是否是有效的BST。有两种递归方法可以解决。我认为它们的空间复杂度都是O(logN),N是TreeNode的数量,所以logN实际上是树的高度。但是在解决方案书中,它说堆栈空间是O(N),我无法弄清楚。谁能帮助我?谢谢!

public class Solution {
        public boolean isValidBST(TreeNode root) {
            return isValidBST(root, null, null);
        }

        private boolean isValidBST(TreeNode x, Integer min, Integer max) {
            return x == null || (min == null || x.val > min) && (max == null || x.val < max) &&
                                isValidBST(x.left, min, x.val) && isValidBST(x.right, x.val, max);
        }
    }

public class Solution {
    private TreeNode prev;

    public boolean isValidBST(TreeNode root) {
        prev = null;
        return isMonotonicIncreasing(root);
    }

    private boolean isMonotonicIncreasing(TreeNode p) {
        if (p == null)  return true;
        if (isMonotonicIncreasing(p.left)) {
            if (prev != null && p.val <= prev.val) return false;
            prev = p;
            return isMonotonicIncreasing(p.right);
        }

        return false;
    }
}

1 个答案:

答案 0 :(得分:0)

空间要求为O(h),其中h是树的高度。

当树平衡时,Log(n)是此代码的最佳情况。

但是在树木偏斜的情况下,空间复杂度将为O(n),即线性。

例如,对于后续树,代码将采用Exactly S(n)空间:

               1                            5    
                 2                        4
                   3                    3
                     4                2 
                       5            1