Given a binary tree, determine if it is a valid binary search tree (BST).
Assume a BST is defined as follows:
Example 1:
2
/ \
1 3
Binary tree
[2,1,3]
, return true.
Example 2:
1
/ \
2 3
Binary tree
[1,2,3]
, return false.
tag: binary tree
自己的解法
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
private class JieTree{
long minVal;
long maxVal;
boolean isBST;
public JieTree(long minVal, long maxVal, boolean isBST){
this.minVal = minVal;
this.maxVal = maxVal;
this.isBST = isBST;
}
}
public boolean isValidBST(TreeNode root) {
if (root == null) return true;
return helper(root).isBST;
}
private JieTree helper(TreeNode root){
if (root == null){
return new JieTree(Long.MAX_VALUE, Long.MIN_VALUE, true);
}
if (root.left == null && root.right == null){
return new JieTree(root.val, root.val, true);
}
JieTree left = helper(root.left);
JieTree right = helper(root.right);
long curMin = Math.min(root.val, left.minVal);
long curMax = Math.max(root.val, right.maxVal);
boolean isBST = left.maxVal < root.val && right.minVal > root.val && left.isBST && right.isBST;
return new JieTree(curMin, curMax, isBST);
}
}