98. 验证二叉搜索树
给定一个二叉树,判断其是否是一个有效的二叉搜索树。
假设一个二叉搜索树具有如下特征:
节点的左子树只包含小于当前节点的数。
节点的右子树只包含大于当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。
递归方式:
是否是搜索二叉树
一、 列可能性:
条件1:左子树是搜索树
条件2:右子树整体是搜索二叉树
条件3:左子树的最大值小于x.value,右子树的最小值大于x.value
二、向左右子树要信息(并集)
是否是搜索二叉树,最大值和最小值
递归对所有节点是一视同仁,所以递归的方法也要返回这个信息
class Solution {
public boolean isValidBST(TreeNode root) {
Info info=process(root);
return info.isBST;
}
public Info process(TreeNode x){
if(x==null){
return null;
}
Info leftData=process(x.left);
Info rightData=process(x.right);
int min=x.val;
int max=x.val;
if(leftData!=null){
min=Math.min(min,leftData.min);
max=Math.max(max,leftData.max);
}
if(rightData!=null){
min=Math.min(min,rightData.min);
max=Math.max(max, rightData.max);
}
boolean isBST=false;
boolean leftFlag = leftData == null || leftData.isBST && leftData.max < x.val;
boolean rightFlag= rightData == null || rightData.isBST && rightData.min > x.val;
if( leftFlag && rightFlag){
isBST=true;
}
return new Info(isBST,max,min);
}
public class Info{
public boolean isBST;
public int max;
public int min;
public Info(boolean isBST,int max,int min){
this.isBST=isBST;
this.max=max;
this.min=min;
}
}
}

浙公网安备 33010602011771号