#98. Validate Binary Search Tree

題目描述

給你一個二元樹的root,判斷是否為二元搜尋樹。

一個二元搜尋樹的定義如下:

  • 左邊子樹的節點只會包含小於當前節點值的節點值。
  • 右邊子樹的節點只會包含大於當前節點值的節點值。
  • 左右子樹同時也必須是二元搜尋樹。

限制條件

  1. 節點數量為[1, 104]。
  2. -231 <= Node.val <= 231 - 1

解題思路

題目既然給出了定義,那麼只要滿足定義就可以了。

任一節點值都會介於某個範圍中,舉例來說:

    4
 2     6
1 3   5 7

每個節點的範圍如下:

  • 4: [null, null]
  • 2: [null, 4 ]
  • 1: [null, 2 ]
  • 3: [2 , 4 ]
  • 6: [4 , null]
  • 5: [4 , 6 ]
  • 7: [6 , null]

Solution

public class Solution {
    public bool IsValidBST(TreeNode root) {
        return Helper(root,null,null);
    }
    public bool Helper(TreeNode root, int? low, int? high){        
        if(root==null) return true;        
        if(low!=null && root.val<=low) return false;
        if(high!=null && root.val>=high) return false;
        return Helper(root.left,low,root.val) && Helper(root.right,root.val,high);
    }
}

複雜度分析:

  • 時間複雜度:O(n)。
  • 空間複雜度:O(n)。

學習重點

  • Binary Search Tree
Last Updated:
Contributors: eisen