mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-07 15:45:40 +08:00
Merge pull request #490 from Miraclelucy/master
Update 0501.二叉搜索树中的众数.md - 增加了python3版本的迭代解法
This commit is contained in:
@ -435,7 +435,7 @@ Python:
|
|||||||
# self.val = val
|
# self.val = val
|
||||||
# self.left = left
|
# self.left = left
|
||||||
# self.right = right
|
# self.right = right
|
||||||
//递归法
|
# 递归法
|
||||||
class Solution:
|
class Solution:
|
||||||
def findMode(self, root: TreeNode) -> List[int]:
|
def findMode(self, root: TreeNode) -> List[int]:
|
||||||
if not root: return
|
if not root: return
|
||||||
@ -460,6 +460,66 @@ class Solution:
|
|||||||
return
|
return
|
||||||
findNumber(root)
|
findNumber(root)
|
||||||
return self.res
|
return self.res
|
||||||
|
|
||||||
|
|
||||||
|
# 迭代法-中序遍历-使用额外空间map的方法:
|
||||||
|
class Solution:
|
||||||
|
def findMode(self, root: TreeNode) -> List[int]:
|
||||||
|
stack = []
|
||||||
|
cur = root
|
||||||
|
pre = None
|
||||||
|
dist = {}
|
||||||
|
while cur or stack:
|
||||||
|
if cur: # 指针来访问节点,访问到最底层
|
||||||
|
stack.append(cur)
|
||||||
|
cur = cur.left
|
||||||
|
else: # 逐一处理节点
|
||||||
|
cur = stack.pop()
|
||||||
|
if cur.val in dist:
|
||||||
|
dist[cur.val] += 1
|
||||||
|
else:
|
||||||
|
dist[cur.val] = 1
|
||||||
|
pre = cur
|
||||||
|
cur = cur.right
|
||||||
|
|
||||||
|
# 找出字典中最大的key
|
||||||
|
res = []
|
||||||
|
for key, value in dist.items():
|
||||||
|
if (value == max(dist.values())):
|
||||||
|
res.append(key)
|
||||||
|
return res
|
||||||
|
|
||||||
|
# 迭代法-中序遍历-不使用额外空间,利用二叉搜索树特性:
|
||||||
|
class Solution:
|
||||||
|
def findMode(self, root: TreeNode) -> List[int]:
|
||||||
|
stack = []
|
||||||
|
cur = root
|
||||||
|
pre = None
|
||||||
|
maxCount, count = 0, 0
|
||||||
|
res = []
|
||||||
|
while cur or stack:
|
||||||
|
if cur: # 指针来访问节点,访问到最底层
|
||||||
|
stack.append(cur)
|
||||||
|
cur = cur.left
|
||||||
|
else: # 逐一处理节点
|
||||||
|
cur = stack.pop()
|
||||||
|
if pre == None: # 第一个节点
|
||||||
|
count = 1
|
||||||
|
elif pre.val == cur.val: # 与前一个节点数值相同
|
||||||
|
count += 1
|
||||||
|
else:
|
||||||
|
count = 1
|
||||||
|
if count == maxCount:
|
||||||
|
res.append(cur.val)
|
||||||
|
if count > maxCount:
|
||||||
|
maxCount = count
|
||||||
|
res.clear()
|
||||||
|
res.append(cur.val)
|
||||||
|
|
||||||
|
pre = cur
|
||||||
|
cur = cur.right
|
||||||
|
return res
|
||||||
|
|
||||||
```
|
```
|
||||||
Go:
|
Go:
|
||||||
暴力法(非BSL)
|
暴力法(非BSL)
|
||||||
|
Reference in New Issue
Block a user