LeetCode 第98題 驗證二叉搜尋樹

2022-08-02 17:36:09 字數 1661 閱讀 4088

1. 題目

2.題目分析與思路

3.**

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

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

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

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

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

這道題有多重解法,從根源來說,這是乙個判斷一棵樹的中序遍歷是不是乙個公升序。

1.使用遞迴,使用遞迴的時候有乙個坑,就是不能只判斷當前值和左子樹右子樹的大小,而是要比較整棵樹的極大值和極小值。

2.同時還要注意一點,每次遞迴的時候一定要選好終止位置,每一次我都選的恰好和正確答案錯過。。。。。雖然說都能做出來,但是卻有簡單和複雜的區別。這道題的中止條件就是這個節點是不是空節點,我選的中止條件就是他是否還有子節點

如果按照我的想法,就要分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,left =float('

-inf

'),right = float('

inf') ) ->bool:

ifnot

root:

return

true

if (root.val <= left)or (root.val >=right):

return

false

else

:

return self.isvalidbst(root.left,left,root.val) and self.isvalidbst(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:

list1 =

defmiddlesearch(root1):

ifnot

root1:

pass

else

: middlesearch(root1.left)

middlesearch(root1.right)

middlesearch(root)

return list1 == sorted(list1) and len(set(list1)) == len(list1)

LeetCode第98題(驗證二叉搜尋樹)

給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。假設乙個二叉搜尋樹具有如下特徵 節點的左子樹只包含小於當前節點的數。節點的右子樹只包含大於當前節點的數。所有左子樹和右子樹自身必須也是二叉搜尋樹。示例 1 輸入 2 1 3 輸出 true 示例 2 輸入 5 1 4 3 6 輸出 false 解釋 ...

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 解釋 ...