题目:判断一棵二叉树是否合法。要求二叉树满足 左子树所有值 < 当前值 < 右子树所有值,并且所有点都满足这个条件。
思路:
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~