Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

[pull] master from youngyangyang04:master #272

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
pull merged 41 commits into AlgorithmAndLeetCode:master from youngyangyang04:master
May 27, 2023
Merged
Changes from 1 commit
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
4b575a8
Update 0450.删除二叉搜索树中的节点.md
fwqaaq Dec 7, 2022
d97f276
Update problems/0450.删除二叉搜索树中的节点.md
fwqaaq Dec 9, 2022
94f79ad
Update 0001.两数之和.md
coffeelize Mar 19, 2023
633cb54
为0226.翻转二叉树添加了C#语言版(包含递归和迭代)
JavieDeng Mar 20, 2023
da2acd7
"为0226.翻转二叉树添加了C#语言版(包含递归和迭代)"
JavieDeng Mar 20, 2023
0231e5f
Merge branch 'youngyangyang04:master' into master
JavieDeng Mar 22, 2023
f51f312
Update 0406.根据身高重建队列.md
fwqaaq Mar 23, 2023
b934f47
Update 0647.回文子串.md
milu-tao Mar 24, 2023
40f8230
Update 0106.从中序与后序遍历序列构造二叉树.md
jianghongcheng May 9, 2023
7eea41e
Update 0654.最大二叉树.md
jianghongcheng May 9, 2023
a45046b
Update 0617.合并二叉树.md
jianghongcheng May 9, 2023
3818de4
Update 0700.二叉搜索树中的搜索.md
jianghongcheng May 9, 2023
f5329cd
Update 0110.平衡二叉树.md
jianghongcheng May 22, 2023
2024fc2
Update 0257.二叉树的所有路径.md
jianghongcheng May 22, 2023
9b770de
Update 0257.二叉树的所有路径.md
jianghongcheng May 22, 2023
1a67274
Update 0257.二叉树的所有路径.md
jianghongcheng May 22, 2023
2e81b18
Update 0257.二叉树的所有路径.md
jianghongcheng May 23, 2023
117ef69
Update 0404.左叶子之和.md
jianghongcheng May 23, 2023
1ac1a8c
Update 0513.找树左下角的值.md
jianghongcheng May 23, 2023
12634b2
Update 0654.最大二叉树.md
jianghongcheng May 23, 2023
41cf3a4
Update 0654.最大二叉树.md
jianghongcheng May 23, 2023
7a544d9
Update 0654.最大二叉树.md
jianghongcheng May 23, 2023
62d48cf
Merge pull request #2083 from jianghongcheng/master
youngyangyang04 May 23, 2023
3f4968a
Merge pull request #1978 from milu-tao/master
youngyangyang04 May 24, 2023
2b2fd97
Merge pull request #1976 from fwqaaq/patch-23
youngyangyang04 May 24, 2023
442349a
Merge pull request #1968 from JavieDeng/master
youngyangyang04 May 24, 2023
58fb2cb
Merge pull request #1807 from fwqaaq/patch-11
youngyangyang04 May 24, 2023
3058654
Update 0098.验证二叉搜索树.md
jianghongcheng May 24, 2023
85e4c41
Update 0530.二叉搜索树的最小绝对差.md
jianghongcheng May 24, 2023
c5d1845
Update 0501.二叉搜索树中的众数.md
jianghongcheng May 24, 2023
daa5417
Update 0236.二叉树的最近公共祖先.md
jianghongcheng May 24, 2023
e7b7aa8
Update 0235.二叉搜索树的最近公共祖先.md
jianghongcheng May 24, 2023
511bf44
Update 0701.二叉搜索树中的插入操作.md
jianghongcheng May 24, 2023
731d1ca
Update 0450.删除二叉搜索树中的节点.md
jianghongcheng May 24, 2023
5365274
Update 0669.修剪二叉搜索树.md
jianghongcheng May 24, 2023
76e3811
Update 0108.将有序数组转换为二叉搜索树.md
jianghongcheng May 24, 2023
14acf5a
Update 0538.把二叉搜索树转换为累加树.md
jianghongcheng May 24, 2023
450b3f2
Update 0111.二叉树的最小深度.md
jianghongcheng May 24, 2023
832897e
Update 0110.平衡二叉树.md
jianghongcheng May 24, 2023
d420634
Merge pull request #2096 from jianghongcheng/master
youngyangyang04 May 25, 2023
44477f8
Merge pull request #1962 from coffeelize/patch-1
youngyangyang04 May 25, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Update 0501.二叉搜索树中的众数.md
  • Loading branch information
jianghongcheng authored May 24, 2023
commit c5d1845f3f48ff7ccd78319fdb4481033b159df1
136 changes: 83 additions & 53 deletions problems/0501.二叉搜索树中的众数.md
View file Open in desktop
Original file line number Diff line number Diff line change
Expand Up @@ -475,8 +475,7 @@ class Solution {

## Python

> 递归法
> 常量空间,递归产生的栈不算
递归法(版本一)利用字典

```python
# Definition for a binary tree node.
Expand All @@ -485,77 +484,108 @@ class Solution {
# self.val = val
# self.left = left
# self.right = right
from collections import defaultdict

class Solution:
def searchBST(self, cur, freq_map):
if cur is None:
return
freq_map[cur.val] += 1 # 统计元素频率
self.searchBST(cur.left, freq_map)
self.searchBST(cur.right, freq_map)

def findMode(self, root):
freq_map = defaultdict(int) # key:元素,value:出现频率
result = []
if root is None:
return result
self.searchBST(root, freq_map)
max_freq = max(freq_map.values())
for key, freq in freq_map.items():
if freq == max_freq:
result.append(key)
return result

```

递归法(版本二)利用二叉搜索树性质

```python
class Solution:
def __init__(self):
self.pre = TreeNode()
self.count = 0
self.max_count = 0
self.maxCount = 0 # 最大频率
self.count = 0 # 统计频率
self.pre = None
self.result = []

def findMode(self, root: TreeNode) -> List[int]:
if not root: return None
self.search_BST(root)
return self.result

def search_BST(self, cur: TreeNode) -> None:
if not cur: return None
self.search_BST(cur.left)
# 第一个节点
if not self.pre:
def searchBST(self, cur):
if cur is None:
return

self.searchBST(cur.left) # 左
# 中
if self.pre is None: # 第一个节点
self.count = 1
# 与前一个节点数值相同
elif self.pre.val == cur.val:
self.count += 1
# 与前一个节点数值不相同
else:
elif self.pre.val == cur.val: # 与前一个节点数值相同
self.count += 1
else: # 与前一个节点数值不同
self.count = 1
self.pre = cur
self.pre = cur # 更新上一个节点

if self.count == self.max_count:
if self.count == self.maxCount: # 如果与最大值频率相同,放进result中
self.result.append(cur.val)

if self.count > self.max_count:
self.max_count = self.count
self.result = [cur.val] # 清空self.result,确保result之前的的元素都失效

self.search_BST(cur.right)
```

if self.count > self.maxCount: # 如果计数大于最大值频率
self.maxCount = self.count # 更新最大频率
self.result = [cur.val] # 很关键的一步,不要忘记清空result,之前result里的元素都失效了

self.searchBST(cur.right) # 右
return

def findMode(self, root):
self.count = 0
self.maxCount = 0
self.pre = None # 记录前一个节点
self.result = []

> 迭代法-中序遍历
> 利用二叉搜索树特性,在历遍过程中更新结果,一次历遍
> 但需要使用额外空间存储历遍的节点
self.searchBST(root)
return self.result
```
迭代法
```python
class Solution:
def findMode(self, root: TreeNode) -> List[int]:
stack = []
def findMode(self, root):
st = []
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: # 第一个节点
maxCount = 0 # 最大频率
count = 0 # 统计频率
result = []

while cur is not None or st:
if cur is not None: # 指针来访问节点,访问到最底层
st.append(cur) # 将访问的节点放进栈
cur = cur.left # 左
else:
cur = st.pop()
if pre is None: # 第一个节点
count = 1
elif pre.val == cur.val: # 与前一个节点数值相同
count += 1
else:
else: # 与前一个节点数值不同
count = 1
if count == maxCount:
res.append(cur.val)
if count > maxCount:
maxCount = count
res.clear()
res.append(cur.val)

if count == maxCount: # 如果和最大值相同,放进result中
result.append(cur.val)

if count > maxCount: # 如果计数大于最大值频率
maxCount = count # 更新最大频率
result = [cur.val] # 很关键的一步,不要忘记清空result,之前result里的元素都失效了

pre = cur
cur = cur.right
return res
cur = cur.right # 右

return result
```
## Go

Expand Down

AltStyle によって変換されたページ (->オリジナル) /