目錄
一、題目內容
二、解題思路
三、**
給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。
假設乙個二叉搜尋樹具有如下特徵:節點的左子樹只包含小於當前節點的數。
節點的右子樹只包含大於當前節點的數。
所有左子樹和右子樹自身必須也是二叉搜尋樹。
示例 1:輸入:
2/ \
1 3
輸出: true
示例 2:思路是:輸入:
5/ \
1 4
/ \3 6
輸出: false
解釋: 輸入為: [5,1,4,null,null,3,6]。
根節點的值為 5 ,但是其右子節點值為 4 。
左子樹小於其父親但大於其爺爺:root是左子樹,min是爺爺,max是父親
右子樹大於其父親但小於其爺爺:root是右子樹,min是父親,max是爺爺
# definition for a binary tree node.
class treenode:
def __init__(self, x):
self.val = x
self.left = none
self.right = none
class solution:
def isvalidbst(self, root: treenode) -> bool:
if root is none:
return true
def dfs(root, min, max):
if min is not none and root.val <= min:
return false
if max is not none and root.val >= max:
return false
if root.left:
if root.val <= root.left.val:
return false
if not dfs(root.left, min, root.val):
return false
if root.right:
if root.val >= root.right.val:
return false
if not dfs(root.right, root.val, max):
return false
return true
return dfs(root, none, none)
if __name__ == '__main__':
a = treenode(5)
a.left = treenode(1)
a.right = treenode(6)
a.right.left = treenode(3)
a.right.right = treenode(7)
# a = treenode(10)
# a.left = treenode(5)
# a.right = treenode(15)
# a.right.left = treenode(6)
# a.right.right = treenode(20)
s = solution()
ans = s.isvalidbst(a)
print(ans)
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 如果對二叉搜尋樹不夠了解,可能...