菜鳥LeetCode 501 二叉搜尋樹中的眾數

2021-10-09 17:57:16 字數 2629 閱讀 9936

給定乙個有相同值的二叉搜尋樹(bst),找出 bst 中的所有眾數(出現頻率最高的元素)。

假定 bst 有如下定義:

結點左子樹中所含結點的值小於等於當前結點的值 結點右子樹中所含結點的值大於等於當前結點的值 左子樹和右子樹都是二叉搜尋樹 例如: 給定

bst [1,null,2,2],1\

2/2返回[2].

:# 中序遍歷bst

ls =

definorder

(node: treenode):if

not node:

return

if node:

# 先遍歷當前結點的左子樹

inorder(node.left)

# 然後遍歷當前結點

# 最後遍歷當前結點的右子樹

inorder(node.right)

if root:

inorder(root)

ans =

iflen

(ls)==0

:return ans

# 統計眾數

cnt =

1 most =

1 ans =

[ls[0]

]for i in

range(1

,len

(ls)):

if ls[i]

== ls[i-1]

: cnt +=

1if cnt == most:

)elif cnt > most:

most = cnt

ans =

[ls[i]

]else

:continue

else

: cnt =

1if cnt == most:

)print

(cnt, most)

return ans

# 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]

: ans =

cnt =

0 most =

0 last =

none

# 中序遍歷bst,相當於公升序排序

definorder

(node: treenode)

:# 當前結點為空,直接返回

ifnot node:

return

# 設定變數nonlocal,呼叫上層變數

nonlocal ans, cnt, most, last

# 左子樹不為空,先去遍歷左子樹

if node.left:

inorder(node.left)

# 遍歷當前結點

# 如果當前結點的值等於上乙個值

if node.val == last:

# 計數器加1

cnt +=

1else

:# 否則重新開始計數

cnt =

1# 比較計數器和當前出現的最多次數

# 如果相等,表明眾數不止乙個

if cnt == most:

# 如果當前的值出現的次數較多

elif cnt > most:

# 更新most值

most = cnt

# 更新ans

ans =

[node.val]

# 比較完成後,更新last為當前結點的值

last = node.val

# 如果右子樹不為空,繼續遍歷右子樹

if node.right:

inorder(node.right)

inorder(root)

return ans

補充:

leetcode 501 二叉搜尋樹中的眾數

給定乙個有相同值的二叉搜尋樹 bst 找出 bst 中的所有眾數 出現頻率最高的元素 假定 bst 有如下定義 結點左子樹中所含結點的值小於等於當前結點的值 結點右子樹中所含結點的值大於等於當前結點的值 左子樹和右子樹都是二叉搜尋樹 例如 給定 bst 1,null,2,2 返回 2 高階 你可以不...

Leetcode 501 二叉搜尋樹中的眾數

給定乙個有相同值的二叉搜尋樹 bst 找出 bst 中的所有眾數 出現頻率最高的元素 假定 bst 有如下定義 例如 給定 bst 1,null,2,2 1 2 2返回 2 提示 如果眾數超過1個,不需考慮輸出順序 高階 你可以不使用額外的空間嗎?假設由遞迴產生的隱式呼叫棧的開銷不被計算在內 使用額...

LeetCode 501 二叉搜尋樹中的眾數

給定乙個有相同值的二叉搜尋樹 bst 找出 bst 中的所有眾數 出現頻率最高的元素 假定 bst 有如下定義 結點左子樹中所含結點的值小於等於當前結點的值 結點右子樹中所含結點的值大於等於當前結點的值 左子樹和右子樹都是二叉搜尋樹 例如 給定 bst 1,null,2,2 1 2 2返回 2 高階...