1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution {
public boolean isValidBST(TreeNode root) {
return helper(null, null, root);
}

public boolean helper(Integer low, Integer up, TreeNode node) {
if (node == null)
return true;
if ((low != null && node.val <= low) || (up != null && node.val >= up))
return false;
return helper(low, node.val, node.left) && helper(node.val, up, node.right);
}
}

DFS. 就是给定一个node, 就能告诉我们这个node以及它包含的node是否符合BST要求. 假设给定一个node, 就知道它所代表的tree是否是BST是没用的. 因为假如我的左树是BST, 右树也是, 我可以取一个值让我所代表的树不是BST. 因此我们要做的是告诉每个node它们可以取的范围是多少, 让它们判断.

时间复杂度: O(n)
空间复杂度: O(n) 可能是skewed tree.