import java.util.ArrayList; public class VaildateBST { //方法一:先序遍历 public boolean isValidBST1(TreeNode root) { if(root==null) return true; return validator(root,null,null); } //定义一个辅助检验器,用来传入上下界递归调用 public boolean validator(TreeNode root,Integer lowerBound,Integer upperBound){ if(root==null) return true; //1.判断当前节点的值是否在上下界范围内,如果超出直接返回false if(lowerBound!=null&&root.val<=lowerBound)return false; if(upperBound!=null&&root.val>=upperBound)return false; //2.递归判断左右子树 return validator(root.left,lowerBound,root.val)&&validator(root.right,root.val,upperBound); } //定义一个列表 ArrayList<Integer> inOrderArray = new ArrayList<>(); //方法二:中序遍历,因为二叉搜索树的排序是一个递增的 public boolean isValidBST(TreeNode root) { //1.中序遍历,得到升序数组 inOrder(root); //2.遍历数组,判断是否升序 for (int i = 0; i <inOrderArray.size() ; i++) { if(i>0&&inOrderArray.get(i)<=inOrderArray.get(i-1)){ return false; } } return true; } //实现一个中序遍历的方法 public void inOrder(TreeNode root){ if(root==null) return; inOrder(root.left); inOrderArray.add(root.val); inOrder(root.right); } public static void main(String[] args) { TreeNode node1 = new TreeNode(5); TreeNode node2 = new TreeNode(1); TreeNode node3 = new TreeNode(4); TreeNode node4 = new TreeNode(3); TreeNode node5 = new TreeNode(6); node1.left = node2; node1.right = node3; node3.left=node4; node3.right=node5; VaildateBST vaildateBST = new VaildateBST(); System.out.println(vaildateBST.isValidBST(node1)); } }