【LeetCode 簡單題】117-二叉搜尋樹中的眾數
阿新 • • 發佈:2018-11-27
宣告:
今天是第117道題。給定兩個沒有重複元素的陣列 nums1
和 nums2
,其中nums1
是 nums2
的子集。找到 nums1
中每個元素在 nums2
中的下一個比其大的值。nums1
中數字 x 的下一個更大元素是指 x 在 nums2
中對應位置的右邊的第一個比 x 大的元素。如果不存在,對應位置輸出-1。以下所有程式碼經過樓主驗證都能在LeetCode上執行成功,程式碼也是借鑑別人的,在文末會附上參考的部落格連結,如果侵犯了博主的相關權益,請聯絡我刪除
(手動比心ღ( ´・ᴗ・` ))
正文
題目:給定一個有相同值的二叉搜尋樹(BST),找出 BST 中的所有眾數(出現頻率最高的元素)。
假定 BST 有如下定義:
- 結點左子樹中所含結點的值小於等於當前結點的值
- 結點右子樹中所含結點的值大於等於當前結點的值
- 左子樹和右子樹都是二叉搜尋樹
例如:
給定 BST[1,null,2,2]
,1 \ 2 / 2
返回[2]
.
提示:如果眾數超過1個,不需考慮輸出順序
進階:你可以不使用額外的空間嗎?(假設由遞迴產生的隱式呼叫棧的開銷不被計算在內)
解法1。常規思路,遍歷整個二叉樹,把元素及其出現頻數放到字典裡,結束後遍歷該字典找出頻數最大對應的鍵並返回,程式碼如下。
執行用時: 88 ms, 在Find Mode in Binary Search Tree的Python3提交中擊敗了78.53% 的使用者
# Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution(): max_count = 0 def FindMode(self,root): res = [] res_map = {} if not root: return [] self.dfs(root,res_map) for key,value in res_map.items(): if value == self.max_count: res.append(key) return res def dfs(self,root,res_map): if not root: return # 中序遍歷,左-根-右 self.dfs(root.left,res_map) res_map[root.val] = res_map.get(root.val,0)+1 self.max_count = max(self.max_count,res_map[root.val]) self.dfs(root.right,res_map)