給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。
假設乙個二叉搜尋樹具有如下特徵:
示例 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 如果對二叉搜尋樹不夠了解,可能...