zoukankan      html  css  js  c++  java
  • 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}".
     
    BST如果进行inorder 的话应该是sorted。
     1 /**
     2  * Definition for binary tree
     3  * public class TreeNode {
     4  *     int val;
     5  *     TreeNode left;
     6  *     TreeNode right;
     7  *     TreeNode(int x) { val = x; }
     8  * }
     9  */
    10 public class Solution {
    11     int per = 0;
    12     boolean sig;
    13     public boolean isValidBST(TreeNode root) {
    14         // IMPORTANT: Please reset any member data you declared, as
    15         // the same Solution instance will be reused for each test case.
    16         per = Integer.MIN_VALUE;
    17         sig = true;
    18         isValid(root);
    19         return sig;
    20     }
    21     public void isValid(TreeNode root){
    22         if(root == null) return;
    23         isValid(root.left);
    24         if(root.val > per) per = root.val;
    25         else{
    26             sig = false;
    27             return;
    28         }
    29         isValid(root.right);
    30     }
    31 }

    还是可以使用递归来做:

     1 public class Solution {
     2     public boolean isValidBST(TreeNode root) {
     3         // IMPORTANT: Please reset any member data you declared, as
     4         // the same Solution instance will be reused for each test case.
     5         return root == null || check(root.left, Integer.MIN_VALUE, root.val) && check(root.right, root.val, Integer.MAX_VALUE);
     6     }
     7     public boolean check(TreeNode root, int min, int max){
     8         if(root == null) return true;
     9         if(!(min < root.val && root.val < max)) return false;
    10         return check(root.left, min, root.val) && check(root.right, root.val, max);
    11     }
    12 }

    这个方法很好!

  • 相关阅读:
    MySQL InnoDB 存储引擎探秘
    MySQL优化面试
    技术面试老是有劲使不出,该怎么办?
    详解RPC远程调用和消息队列MQ的区别
    ConcurrentHashMap1.8源码分析
    kafka topic制定规则
    GitLab本地、远程更新已经fork的项目
    Swagger2使用参考
    分布式配置中心选型
    搭建Elasticsearch平台
  • 原文地址:https://www.cnblogs.com/reynold-lei/p/3425296.html
Copyright © 2011-2022 走看看