• 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 }

    这个方法很好!

  • 相关阅读:
    CF732 F Tourist Reform——边双连通分量
    CF36 E Two Paths——欧拉(回)路
    最小生成树()
    Bellman-Ford算法
    SPFA算法
    归并排序(Merge_Sort)
    并查集
    int(3)与int(11)的区别
    mysql应该看的blog
    mysql建立索引
  • 原文地址:https://www.cnblogs.com/reynold-lei/p/3425296.html
Copyright © 2020-2023  润新知