题目描述:
给定一个二叉树,判断其是否是一个有效的二叉搜索树。
假设一个二叉搜索树具有如下特征:
节点的左子树只包含小于当前节点的数。
节点的右子树只包含大于当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。
示例 1:
输入:
输出: true
示例 2:
输入:
输出: false
解释: 输入为: [5,1,4,null,null,3,6]。
根节点的值为 5 ,但是其右子节点值为 4 。
Java代码:
核心代码:
List<Integer> res = new ArrayList<Integer>();
public boolean isValidBST(TreeNode root) {
if(root ==null)
return true;
inorder(root, res);
for(int i=0; i<res.size()-1; i++){
if(res.get(i)>=res.get(i+1))
return false;
}
return true;
}
public void inorder(TreeNode root, List<Integer> res){
if(root == null)
return;
inorder(root.left, res);
res.add(root.val);
inorder(root.right, res);
}
全部代码:
package com.renxia;
import java.util.ArrayList;
import java.util.List;
public class nineEight {
public static class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode() {}
TreeNode(int val) { this.val = val; }
TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
}
private static List<Integer> res = new ArrayList<Integer>();
public static boolean isValidBST(TreeNode root) {
if(root ==null)
return true;
inorder(root, res);
for(int i=0; i<res.size()-1; i++){
if(res.get(i)>=res.get(i+1))
return false;
}
return true;
}
public static void inorder(TreeNode root, List<Integer> res){
if(root == null)
return;
inorder(root.left, res);
res.add(root.val);
inorder(root.right, res);
}
public static void main(String[] args) {
TreeNode node1 = new TreeNode(1);
TreeNode node3 = new TreeNode(3);
TreeNode node4 = new TreeNode(4);
TreeNode node5 = new TreeNode(5);
TreeNode node6 = new TreeNode(6);
node5.left = node1;
node5.right = node4;
node4.left = node3;
node4.right = node6;
System.out.println(isValidBST(node5));
}
}
运行结果:
【以示例2为参考】