LeetCode 98 驗證二叉搜尋樹

2022-06-22 05:06:07 字數 2111 閱讀 5891

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

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

示例 1:

輸入:

2/ \

1 3

輸出: true

示例 2:

輸入:

5/ \

1 4

/ \3 6

輸出: false

解釋: 輸入為: [5,1,4,null,null,3,6]。

根節點的值為 5 ,但是其右子節點值為 4 。

根據排序二叉樹特點可知,其中序遍歷的結果是遞增的,因此,對二叉樹進行中序遍歷,判斷其是否為遞增序列即可知道它是不是排序二叉樹。

class solution(object):

def isvalidbst(self, root):

""":type root: treenode

:rtype: bool

"""inorder = self.inorder(root)

return inorder == list(sorted(set(inorder)))

def inorder(self, root):

if root is none:

return

return self.inorder(root.left) + [root.val] + self.inorder(root.right)

上述**雖然看似簡單,但是在驗證列表為公升序排序的時候時間複雜度過大。還有一種判斷其中序遍歷為公升序的方法,即兩兩相比,如果都是公升序則整個排序為公升序,否則不是公升序。

class solution(object):

def isvalidbst(self, root):

""":type root: treenode

:rtype: bool

"""self.prev = none

return self.helper(root)

def helper(self, root):

if root is none:

return true

if not self.helper(root.left):

return false

if self.prev and self.prev.val >= root.val:

return false

self.prev = root

return self.helper(root.right)

取左子樹的最大值為 min ,取右子樹的最小值為 max ,根據定義,一定有 root.val > min 且 root.val < max ,對整個二叉樹遞迴呼叫即可得出最終結果。

import sys

class solution(object):

def isvalidbst(self, root):

""":type root: treenode

:rtype: bool

"""return self.helper(root, -sys.maxsize - 1, sys.maxsize)

def helper(self, root, min, max):

""":type root: treenode

:rtype: bool

"""if root is none:

return true

if min is not none and root.val <= min:

return false

if max is not none and root.val >= max:

return false

return self.helper(root.left, min, root.val) and self.helper(root.right, root.val, max)

其中,sys.maxsize指系統最大值,相反,-sys.maxsize指系統最小值,這種寫法經常用在比較大小的入口處。

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