程序媛詹妮弗
终身学习

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

 

posted on 2018-10-19 06:14  程序媛詹妮弗  阅读(108)  评论(0编辑  收藏  举报