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