1. 程式人生 > 其它 >leetcode hot 100- 98. 驗證二叉搜尋樹

leetcode hot 100- 98. 驗證二叉搜尋樹

技術標籤:二叉樹資料結構演算法leetcodejava

98. 驗證二叉搜尋樹

題目描述:

給定一個二叉樹,判斷其是否是一個有效的二叉搜尋樹。

假設一個二叉搜尋樹具有如下特徵:

  • 節點的左子樹只包含小於當前節點的數。
  • 節點的右子樹只包含大於當前節點的數。
  • 所有左子樹和右子樹自身必須也是二叉搜尋樹。

示例1:

示例2:

思路:

思路參考:https://leetcode-cn.com/problems/validate-binary-search-tree/solution/zhong-xu-bian-li-qing-song-na-xia-bi-xu-miao-dong-/

二叉搜尋樹的中序遍歷是遞增序列,所以只需要使用中序遍歷方式遍歷二叉樹,判斷當前結點是否大於上一個結點,如果不符合直接返回false 注意:preVal必須使用Long型別,因為擔心某個結點的值剛好等於Integer.MIN_VALUE
 1 class Solution {
 2     public long preVal = Long.MIN_VALUE; // 使用Long型別是擔心某個結點的值剛好等於Integer.MIN_VALUE
 3     public boolean isValidBST(TreeNode root) {
 4         if(root == null){
 5             return true;
 6         }
 7 
 8         if(!isValidBST(root.left)){ // 判斷左子樹是否是二叉搜尋樹
 9             return false;
10         }
11         if(root.val <= preVal){
12             return false;
13         }
14         preVal = root.val;
15         return isValidBST(root.right);
16     }
17 }
leetcode 執行用時:0 ms > 100.00%, 記憶體消耗:38.3 MB > 80.46%

複雜度分析:

時間複雜度:O(n)。n 是結點個數,使用中序遍歷的方式遍歷了整棵樹的所有結點,所以時間複雜度為O(n)。 空間複雜度:O(n)。空間複雜度取決於棧的深度,棧的深度又取決於樹的高度,所以空間複雜度最壞為樹退化成連結串列時複雜度為O(n)。