@author stormma
@date 2017/11/28
生命不息,奋斗不止!
题目
Given a binary tree, determine if it is a valid binary search tree (BST).
Assume a BST is defined as follows:
- The left subtree of a node contains only nodes with keys less than the node’s key.
- The right subtree of a node contains only nodes with keys greater than the node’s key.
- Both the left and right subtrees must also be binary search trees.
Example 1
2
/ \
1 3
Binary tree [2,1,3]
, return true.
Example 2
1
/ \
2 3
Binary tree [1,2,3]
, return false.
解决方案
递归判断结点的值是否在一个范围内就行了。左子树的值在(null, root.val)范围内(null表示无穷大/小)。右子树的值在(root.val, null)的范围内。
代码实现
static class Solution2 {
public boolean isValidBST(Question100.TreeNode root) {
return dfs(root, null, null);
}
private boolean dfs(Question100.TreeNode node, Integer min, Integer max) {
if (node == null) {
return true;
}
if ((min != null && node.val <= min) || (max != null &&node.val >= max)) {
return false;
}
return dfs(node.left, min, node.val) && dfs(node.right, node.val, max);
}
}
另外还有一种方法,可以采用中序遍历的方式来判断结果是否有序来推出是不是一个BST。