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

  • 相关阅读:
    java基础_面试题笔记
    ACM-ICPC 2018 Xuzhou Online Contest题解
    覆盖点问题总结
    2018icpc沈阳网络赛题解(转发)
    树链剖分
    树状数组
    线段树板子
    sdoi2016生成魔咒
    洛谷3804
    大佬博文收集
  • 原文地址:https://www.cnblogs.com/liuliu5151/p/9814313.html
Copyright © 2020-2023  润新知