leetcode98 驗證二叉搜尋樹

2021-09-12 08:52:51 字數 1831 閱讀 6653

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

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

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

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

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

示例 1:

輸入:2

/ 1 3

輸出: true

示例 2:

輸入:5

/ 1 4

/ 3 6

輸出: false

解釋: 輸入為: [5,1,4,null,null,3,6]。

根節點的值為 5 ,但是其右子節點值為 4 。

需要注意的是左子樹的所有節點小於根節點,右子樹的大於,所以每乙個點的值都有左右邊界:

# 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

:return self.helper(root)

defhelper

(self, root, left=

float

('-inf'

), right=

float

('inf'))

:ifnot root:

return

true

# 每個節點都有個值的範圍,約束一下就好

return left < root.val < right and self.helper(root.left, left, root.val)\

and self.helper(root.right, root.val, right)

不借助極大極小值:
# 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

:return self.helper(root)

defhelper

(self, root, left=

none

, right=

none):

ifnot root:

return

true

if left and left.val >= root.val:

return

false

if right and right.val <= root.val:

return

false

return self.helper(root.left, left, root)

and\

self.helper(root.right, root, right)

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