兩種方法:
1.遞迴,每個節點遞迴時都會有乙個上下界,越往下遍歷節點的上下界會越來越收緊,若有不在上下界內的就返回false,最初對根節點的上下界沒有,那就預設為負無窮到正無窮。
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:
def func(node,maxi=float('inf'),mini=float('-inf')):
if not node:
return true
if node.val<=mini or node.val>=maxi:
return false
#mini不為預設值時,表示node有位於其左側的祖先節點,值為mini
#maxi不為預設值時,表示node有位於其右側的祖先節點,值為maxi
return func(node.left,node.val,mini) and func(node.right,maxi,node.val)
return func(root)
# 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:
global res,x
x=float('-inf')
res=true
def mid_order(node):
global res
global x
if not node:
return
mid_order(node.left)
if x>=node.val:
res=false
return
x=node.val
mid_order(node.right)
mid_order(root)
return res
98 驗證二叉搜尋樹
給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。假設乙個二叉搜尋樹具有如下特徵 節點的左子樹只包含小於當前節點的數。節點的右子樹只包含大於當前節點的數。所有左子樹和右子樹自身必須也是二叉搜尋樹。示例 1 輸入 2 1 3 輸出 true 示例 2 輸入 5 1 4 3 6 輸出 false 解釋 ...
98 驗證二叉搜尋樹
給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。假設乙個二叉搜尋樹具有如下特徵 示例 1 輸入 2 1 3 輸出 true示例 2 輸入 5 1 4 3 6 輸出 false 解釋 輸入為 5,1,4,null,null,3,6 根節點的值為 5 但是其右子節點值為 4 import sys cl...
98 驗證二叉搜尋樹
98.驗證二叉搜尋樹 分析這道驗證二叉搜尋樹有很多種解法,可以利用它本身的性質來做,即左 根 右,也可以通過利用中序遍歷結果為有序數列來做,下面我們先來看最簡單的一種,就是利用其本身性質來做,初始化時帶入系統最大值和最小值,在遞迴過程中換成它們自己的節點值,用long代替int就是為了包括int的邊...