[leetcode]_Validate Binary Search Tree

题目:判断一棵二叉树是否合法。要求二叉树满足 左子树所有值 < 当前值 < 右子树所有值,并且所有点都满足这个条件。

思路:

   1、从当前根节点判断,求根节点左子树最大值maxLeft,右子树最小值minRight。

     2、判断当前节点值是否满足 maxLeft < current < minRight。

        3、如果满足,则递归地判断其左右子树是否同样合法。

代码:

 1     public boolean isValidBST(TreeNode root) {
 2         if(root == null) return true;
 3         
 4         int maxLeft = maxValue(root.left);
 5         int minRight = minValue(root.right);
 6         
 7         return maxLeft < root.val && minRight > root.val && isValidBST(root.left) && isValidBST(root.right);
 8     }
 9     
10     public int maxValue(TreeNode node){
11         if(node == null) return Integer.MIN_VALUE;
12         int leftMax = maxValue(node.left);
13         int rightMax = maxValue(node.right);
14         return Math.max(node.val , Math.max(leftMax , rightMax));
15     }
16     
17     public int minValue(TreeNode node){
18         if(node == null) return Integer.MAX_VALUE;
19         int leftMin = minValue(node.left);
20         int rightMin = minValue(node.right);
21         return Math.min(node.val , Math.min(leftMin , rightMin));
22     }

网络上还有一种更简单的解法。今天好累啊,明天再做了。see you~

原文地址:https://www.cnblogs.com/glamourousGirl/p/3771197.html