給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。假設乙個二叉搜尋樹具有如下特徵:
節點的左子樹只包含小於當前節點的數。
節點的右子樹只包含大於當前節點的數。
所有左子樹和右子樹自身必須也是二叉搜尋樹。
示例 1:
輸入:2
/ \1 3
輸出: true
示例 2:
輸入:5
/ \1 4
/ \3 6
輸出: false
解釋: 輸入為: [5,1,4,null,null,3,6]。
根節點的值為 5 ,但是其右子節點值為 4 。
publicboolean
isvalidbst(treenode root)
//時間複雜度: o(n)
//空間複雜度:o(n)
//在原有的遞迴中,增加界限值
//限制每個節點的最大值和最小值
public
boolean dfs(treenode root,long max,long
min)
if(root.val >= max || root.val <=min)
return dfs(root.right,max,root.val) &&dfs(root.left,root.val,min);
}
publicint pre =integer.min_value;
//時間複雜度和空間複雜度同上面相同,不過邏輯取巧,更簡單了
public
boolean
isvalidbst(treenode root)
if(!isvalidbst(root.left))
if(root.val <=pre)
pre =root.val;
return
isvalidbst(root.right);
}
力扣 98 驗證二叉搜尋樹
題目 傳送門 題目分析 二叉搜素樹有乙個很重要的性質 若左子樹不空,則左子樹上的所有結點的值均小於它的根節點的值 若它的右子樹不空,則右子樹上所有結點的值均大於它的根節點的值。那麼,很容易得到,對二叉搜尋樹進行中序遍歷,得到的序列應該是公升序的。這樣的話,我們在中序遍歷的時候檢查當前節點的值是否大於...
力扣Leetcode 98 驗證二叉搜尋樹
給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。假設乙個二叉搜尋樹具有如下特徵 輸入 2 1 3 輸出 true輸入 5 1 4 3 6 輸出 false 解釋 輸入為 5,1,4,null,null,3,6 根節點的值為 5 但是其右子節點值為 4 一開始想的是遞迴分支 有點類似貪心思想 忽略了...
98 驗證二叉搜尋樹
給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。假設乙個二叉搜尋樹具有如下特徵 節點的左子樹只包含小於當前節點的數。節點的右子樹只包含大於當前節點的數。所有左子樹和右子樹自身必須也是二叉搜尋樹。示例 1 輸入 2 1 3 輸出 true 示例 2 輸入 5 1 4 3 6 輸出 false 解釋 ...