98 驗證二叉搜尋樹

2022-05-08 22:48:18 字數 1381 閱讀 8232

兩種方法:

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的邊...