当前位置:编程学习 > JAVA >>

Validate Binary Search Tree @LeetCode

一开始想到了递归,但没想到用上下限的办法,而用多加一个parent作参数,结果非常麻烦。改成用上下限后代码很简洁清晰。
 
package Level3;  
  
import Utility.TreeNode;  
  
/** 
 * Validate Binary Search Tree  
 *  
 *  Given a binary tree, determine if it is a valid binary search tree (BST). 

Assume a BST is defined as follows: 

The left subtree of a node contains only nodes with keys less than the node's key. 
The right subtree of a node contains only nodes with keys greater than the node's key. 
Both the left and right subtrees must also be binary search trees. 
confused what "{1,#,2,3}" means? > read more on how binary tree is serialized on OJ. 


OJ's Binary Tree Serialization: 
The serialization of a binary tree follows a level order traversal, where '#' signifies a path terminator where no node exists below. 

Here's an example: 
   1 
  / \ 
 2   3 
    / 
   4 
    \ 
     5 
The above binary tree is serialized as "{1,2,3,#,#,4,#,#,5}". 
 * 
 */  
public class S98 {  
  
    public static void main(String[] args) {  
        TreeNode root = new TreeNode(3);  
        TreeNode p1 = new TreeNode(1);  
        TreeNode p2 = new TreeNode(5);  
        TreeNode p3 = new TreeNode(0);  
        TreeNode p4 = new TreeNode(2);  
        TreeNode p5 = new TreeNode(4);  
        TreeNode p6 = new TreeNode(6);  
          
        root.left = p1;  
        root.right = p2;  
        p1.left = p3;  
        p1.right = p4;  
        p2.left = p5;  
        p2.right = p6;  
        System.out.println(isValidBST(root));  
    }  
  
    public static boolean isValidBST(TreeNode root) {  
        return rec(root, Integer.MIN_VALUE, Integer.MAX_VALUE);  
    }  
      
    // 用最小值和最大值,来限定子树的范围  
    public static boolean rec(TreeNode root, int min, int max){  
        if(root == null){  
            return true;  
        }  
          
        // 不在范围内  
        if(root.val <= min || root.val >= max){  
            return false;  
        }  
          
        // 检查左右子树的合法性并更新上下限  
        return rec(root.left, min, root.val) && rec(root.right, root.val, max);  
    }  
      
      
      
}  

 


补充:软件开发 , Java ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,