leetcode 98 驗證二叉搜尋樹

2021-10-09 16:00:41 字數 2026 閱讀 8775

目錄

一、題目內容

二、解題思路

三、**

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

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

節點的左子樹只包含小於當前節點的數。

節點的右子樹只包含大於當前節點的數。

所有左子樹和右子樹自身必須也是二叉搜尋樹。

示例 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 如果對二叉搜尋樹不夠了解,可能...