【发布时间】:2015-09-09 15:17:46
【问题描述】:
问题是检查树是否是有效的 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;
}
}
【问题讨论】:
-
谢谢,但是对于二叉树最大深度(leetcode.com/problems/maximum-depth-of-binary-tree)的问题,书上说空间是O(logN),return (root == null)? 0 : 1 + Math.max(maxDepth(root.left), maxDepth(root.right));我认为它们是相同的。
-
它是
O(N),因为如果不平衡树降级为链表,它的深度可以达到O(N)。 -
非常感谢。那讲得通。但是对于我上面提到的 Leetcode 中二叉树的最大深度问题。官方解说空间成本是O(logN),二叉树也可以不平衡。所以我仍然感到困惑。谢谢!