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

  • 相关阅读:
    URL传递的参数是UTF-8编码,在打开的页面正常显示(GB2312)的方法
    JS windows.open打开窗口并居中
    一个tomcat如何部署多个项目运行
    redis 服务配置开机自启动
    解决端口被占用问题
    MySQL中concat以及group_concat的使用
    java 使用OpenOffice文件实现预览
    eclipse安装maven插件
    数据库三范式
    mysql 查询的字段值太长显示不全 group_concat
  • 原文地址:https://www.cnblogs.com/liuliu5151/p/9814313.html
Copyright © 2011-2022 走看看