題目如下
給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。
假設乙個二叉搜尋樹具有如下特徵:
節點的左子樹只包含小於當前節點的數。
節點的右子樹只包含大於當前節點的數。
所有左子樹和右子樹自身必須也是二叉搜尋樹。
示例 1
:輸入:
2/ \
13輸出:true
示例 2
:輸入:
5/ \
14/ \ 3
6輸出:
false
解釋: 輸入為:[5
,1,4
,null,null,3,
6]。根節點的值為 5 ,但是其右子節點值為 4 。
直接使用二叉樹的中序遍歷獲取乙個陣列,檢視該陣列是否為嚴格遞增
**如下
# definition for a binary tree node.
class
treenode
(object):
def__init__
(self, x)
: self.val = x
self.left =
none
self.right =
none
class
solution
(object):
defisvalidbst
(self, root)
:"""
:type root: treenode
:rtype: bool
"""anslist = self.helper(root)
for i in
range
(len
(anslist)-1
):if(anslist[i]
>= anslist[i+1]
):return
false
return
true
defhelper
(self, root)
:if root ==
none
:return
else
:return self.helper(root.left)
+[root.val]
+ self.helper(root.right)
採用遞迴加上最大值最小值思想,當檢視右節點時,最小值為該節點的值,若右節點的值比本節點的值還要小;或者檢視左節點時,最大值為該節點的值,若左節點的值大於本節點的最大值。這樣兩種情況會返回false,
**如下
public
class
treenode
}class
solution
public
boolean
helper
(treenode root, long min, long max)if(
(root.val <= min)
||(root.val >= max)
)return
helper
(root.left, min,
(long
) root.val)
&&helper
(root.right,
(long
) root.val, 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 如果對二叉搜尋樹不夠了解,可能...