leetcode 98 驗證二叉搜尋樹

2021-09-24 03:08:10 字數 1724 閱讀 8734

題目如下

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

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

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

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

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

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