问题是检查树是否是有效的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;
}
}
答案 0 :(得分:0)
空间要求为O(h),其中h是树的高度。
当树平衡时,Log(n)是此代码的最佳情况。
但是在树木偏斜的情况下,空间复杂度将为O(n),即线性。
例如,对于后续树,代码将采用Exactly S(n)空间:
1 5
2 4
3 3
4 2
5 1