zoukankan      html  css  js  c++  java
  • [leetcode]98. 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.

    Example 1:

    Input:
        2
    / 1 3 Output: true

    Example 2:

        5
       / 
      1   4
         / 
        3   6
    Output: false
    Explanation: The input is: [5,1,4,null,null,3,6]. The root node's value
                 is 5 but its right child's value is 4.

    Solution1: DFS

    根据BST的性质: 左子树<根<右子树

    要特别留心,对于input的root,没有办法给定一个确定的范围。所以初始化为null

        5  (min, max)                             5 :in(min,max)?
       /                                 /   / return true               return false
      1   4                           1 update(min, 5), in (min, 5)?    4 update(5, 4), in (5,4)?

    code

     1 /**
     2  * Definition for a binary tree node.
     3  * public class TreeNode {
     4  *     int val;
     5  *     TreeNode left;
     6  *     TreeNode right;
     7  *     TreeNode(int x) { val = x; }
     8  * }
     9  */
    10 class Solution {
    11     public boolean isValidBST(TreeNode root) {
    12                            /*why using null, null? 因为对于root,没有办法确定范围*/      
    13        return helper(root, null, null);
    14     }
    15                                   /* 因为上面定义的是null,这里initialize就应该是Integer而不是int*/   
    16     private boolean helper(TreeNode root, Integer min, Integer max) {
    17         // base case 
    18         if (root == null)return true;
    19         
    20         // based on BST attribute
    21         if ((min != null && root.val <= min) || (max != null && root.val >= max))
    22             return false;
    23         
    24         // dfs
    25         Boolean left = helper(root.left, min, root.val);
    26         Boolean right = helper(root.right, root.val, max);
    27         return  left && right;
    28     }
    29 }

    复杂度

    Time: O(n) : visit each node 

    Space: O(h):  h is the deepest height of such tree

  • 相关阅读:
    随机数组找丢失数据
    js打开新页面 关闭当前页 关闭父页面
    Markdown测试
    ThinkPHP中的时间自动填充 无法获取时间
    页面在谷歌浏览器和IE浏览器顶部多出空白行,火狐显示正常
    Thinkphp中验证码不显示解决办法
    106运用SWITCH语句打印星期几的单词
    声明两个变量并赋值计算出矩形的面积
    不用*用移位运算符计算21*16的数值是多少
    97.经典实例,计算球形的面积和体积
  • 原文地址:https://www.cnblogs.com/liuliu5151/p/9814313.html
Copyright © 2011-2022 走看看