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.
confused what "{1,#,2,3}"
means? > read more on how binary tree is serialized on OJ.
Subscribe to see which companies asked this question
简单 DFS 其实建个数组从下往上传一样可以
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {//开始想了半天怎么把两个极值从下往上传,但其也可以从上往下传限制条件的
public boolean isValidBST(TreeNode root) {
MAX=0;
MIN=0;
return isV(root,Integer.MIN_VALUE,Integer.MAX_VALUE);
}
private int MAX=0,MIN=0;
private boolean isV(TreeNode root ,int min,int max){
if(root==null)return true;
if(root.val==Integer.MIN_VALUE){
if(MIN==0){
MIN=1;
if(root.val<min||root.val>=max)return false;
}else{
return false;
}
}else if(root.val==Integer.MAX_VALUE){
if(MAX==0){
MAX=1;
if(root.val<=min||root.val>max)return false;
}else{
return false;
}
}else if(root.val<=min||root.val>=max)return false;
return isV(root.left,min,root.val)&&isV(root.right,root.val,max);
}
}