給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。
假設乙個二叉搜尋樹具有如下特徵:
示例 1:
輸入:
2/ \
1 3
輸出: true
示例 2:
輸入:
5/ \
1 4
/ \3 6
輸出: false
解釋: 輸入為: [5,1,4,null,null,3,6]。
根節點的值為 5 ,但是其右子節點值為 4 。
解法一:中序遍歷,如果是乙個有效的額二叉搜尋樹,那麼中序遍歷的結果會是乙個公升序的序列。 時間複雜度o(n)
public
boolean
isvalidbst
(treenode root)
list
list =
newarraylist
();helper
(root, list)
;for
(int i =
0; i < list.
size()
-1; i++)}
return
true;}
public
static
void
helper
(treenode root, list list)
helper
(root.left, list)
; list.
add(root.val)
;helper
(root.right, list)
;}
遍歷時不需要保留整個序列,只需要保留前繼節點即可。
int pre = integer.min_value;
public
boolean
isvalidbst
(treenode root)if(
isvalidbst
(root.left))}
return
false
;}
解法二:遞迴 先判斷當前節點是否符合要求,符合的話,繼續判斷左右節點。 時間複雜度o(n)
public
boolean
isvalidbst
(treenode root)
private
boolean
helper
(treenode root,
long min,
long max)
leetcode 98 驗證二叉搜尋樹
給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。乙個二叉搜尋樹具有如下特徵 示例 1 輸入 1 3 輸出 true 示例 2 輸入 1 4 3 6 輸出 false 解釋 輸入為 5,1,4,null,null,3,6 根節點的值為 5 但是其右子節點值為 4 關鍵資訊 1二叉搜尋樹的中序遍歷是遞...
leetcode 98 驗證二叉搜尋樹
給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。乙個二叉搜尋樹具有如下特徵 示例 1 輸入 2 1 3 輸出 true示例 2 輸入 5 1 4 3 6 輸出 false 解釋 輸入為 5,1,4,null,null,3,6 根節點的值為 5 但是其右子節點值為 4 解題思路 中序遍歷遞增,每次只...
leetcode 98 驗證二叉搜尋樹
給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。乙個二叉搜尋樹具有如下特徵 示例 1 輸入 2 1 3 輸出 true示例 2 輸入 5 1 4 3 6 輸出 false 解釋 輸入為 5,1,4,null,null,3,6 根節點的值為 5 但是其右子節點值為 4 如果對二叉搜尋樹不夠了解,可能...