給定乙個有相同值的二叉搜尋樹(bst),找出 bst 中的所有眾數(出現頻率最高的元素)。假定 bst 有如下定義:
結點左子樹中所含結點的值小於等於當前結點的值
結點右子樹中所含結點的值大於等於當前結點的值
左子樹和右子樹都是二叉搜尋樹
例如:給定 bst [1,null,2,2],1\
2/21.關鍵是o(1)空間,其實宣告乙個儲存返回結果的res也還是o(1),因為眾數最大多數情況下只是輸入的一小部分,然後就可以定義幾個全域性變數來尋找眾數
# definition for a binary tree node.
# class treenode:
# def __init__(self, x):
# self.val = x
# self.left = none
# self.right = none
class solution:
def findmode(self, root: treenode) -> list[int]:
res=
most=0
last=none
cnt=0
def dfs(root):
if not root:return
nonlocal res,most,last,cnt
dfs(root.left)
if root.val==last:cnt+=1
else:cnt=1
elif cnt>most:
most=cnt
res=[root.val]
last=root.val
dfs(root.right)
dfs(root)
return res
501 二叉搜尋樹中的眾數
首先這題可以遍歷一遍二叉樹,用乙個map來存每個數字出現的次數之後取最大的就行,但這樣沒有利用到二叉搜尋樹的條件。所以我們利用二叉搜尋樹中序遍歷公升序 此題中為非降序 的性質,儲存中序字首節點,若當前節點與字首節點值相同,計數 1,若不同則重新從0開始計數。因為是非降序,所以一旦遍歷到了乙個更大的數...
501二叉搜尋樹中的眾數
給定乙個有相同值的二叉搜尋樹 bst 找出 bst 中的所有眾數 出現頻率最高的元素 假定 bst 有如下定義 例如 給定 bst 1,null,2,2 返回 2 bst中序遍歷是公升序序列,逐個比對當前結點 root 值與前驅結點 pre 值。更新當前節點值出現次數 curtimes 及最大出現次...
501 二叉搜尋樹中的眾數
給定乙個有相同值的二叉搜尋樹 bst 找出 bst 中的所有眾數 出現頻率最高的元素 假定 bst 有如下定義 例如 給定 bst 1,null,2,2 返回 2 高階 你可以不使用額外的空間嗎?假設由遞迴產生的隱式呼叫棧的開銷不被計算在內 因為二叉搜尋樹,中序遍歷的話得到的值是逐漸增加的,可以利用...