目录
题目描述
给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。
有效 二叉搜索树定义如下:
- 节点的左子树只包含 小于 当前节点的数。
- 节点的右子树只包含 大于 当前节点的数。
- 所有左子树和右子树自身必须也是二叉搜索树。
解法一
class TreeNode{
int value;
TreeNode left;
TreeNode right;
TreeNode(){}
TreeNode(int value){this.value=value; this.left=null; this.right=null; }
TreeNode(TreeNode left,TreeNode right,int value){ this.left = left; this.right = right; this.value = value; }
}
public static long preValue = Long.MIN_VALUE;
public static boolean isValidBST(TreeNode root) {
if(root==null){
return true;
}
boolean left = isValidBST(root.left);
if(!left){
return false;
}
if(preValue>=root.value){
return false;
}else{
preValue=root.value;
}
return isValidBST(root.right);
}
解法二
public static void process(TreeNode Node,List<Integer> inOrderList){
if(Node==null){
return;
}
process(Node.left,inOrderList);
inOrderList.add(Node.value);
process(Node.right,inOrderList);
}
public static boolean isValidBST2(TreeNode root) {
List<Integer> inOrderList = new ArrayList<>();
process(root,inOrderList);
int tmp = Integer.MIN_VALUE;
for(int i:inOrderList){
if(tmp>=i){
return false;
}
tmp = i;
}
return true;
}