diff --git a/problems/0501.二叉搜索树中的众数.md b/problems/0501.二叉搜索树中的众数.md index 1da32343..efbabc4a 100644 --- a/problems/0501.二叉搜索树中的众数.md +++ b/problems/0501.二叉搜索树中的众数.md @@ -33,20 +33,20 @@ 进阶:你可以不使用额外的空间吗?(假设由递归产生的隐式调用栈的开销不被计算在内) -# 算法公开课 +## 算法公开课 -**《代码随想录》算法视频公开课:[不仅双指针,还有代码技巧可以惊艳到你! | LeetCode:501.二叉搜索树中的众数](https://www.bilibili.com/video/BV1fD4y117gp),相信结合视频在看本篇题解,更有助于大家对本题的理解**。 +**[《代码随想录》算法视频公开课](https://programmercarl.com/other/gongkaike.html):[不仅双指针,还有代码技巧可以惊艳到你! | LeetCode:501.二叉搜索树中的众数](https://www.bilibili.com/video/BV1fD4y117gp),相信结合视频在看本篇题解,更有助于大家对本题的理解**。 -# 思路 +## 思路 这道题目呢,递归法我从两个维度来讲。 首先如果不是二叉搜索树的话,应该怎么解题,是二叉搜索树,又应该如何解题,两种方式做一个比较,可以加深大家对二叉树的理解。 -## 递归法 +### 递归法 -### 如果不是二叉搜索树 +#### 如果不是二叉搜索树 如果不是二叉搜索树,最直观的方法一定是把这个树都遍历了,用map统计频率,把频率排个序,最后取前面高频的元素的集合。 @@ -140,7 +140,7 @@ public: **所以如果本题没有说是二叉搜索树的话,那么就按照上面的思路写!** -### 是二叉搜索树 +#### 是二叉搜索树 **既然是搜索树,它中序遍历就是有序的**。 @@ -271,7 +271,7 @@ public: ``` -## 迭代法 +### 迭代法 只要把中序遍历转成迭代,中间节点的处理逻辑完全一样。 @@ -326,7 +326,7 @@ public: }; ``` -# 总结 +## 总结 本题在递归法中,我给出了如果是普通二叉树,应该怎么求众数。 @@ -345,10 +345,10 @@ public: > **需要强调的是 leetcode上的耗时统计是非常不准确的,看个大概就行,一样的代码耗时可以差百分之50以上**,所以leetcode的耗时统计别太当回事,知道理论上的效率优劣就行了。 -# 其他语言版本 +## 其他语言版本 -## Java +### Java 暴力法 @@ -472,7 +472,7 @@ class Solution { } } ``` -統一迭代法 +统一迭代法 ```Java class Solution { public int[] findMode(TreeNode root) { @@ -526,7 +526,7 @@ class Solution { ``` -## Python +### Python 递归法(版本一)利用字典 @@ -640,7 +640,7 @@ class Solution: return result ``` -## Go +### Go 计数法,不使用额外空间,利用二叉树性质,中序遍历 ```go @@ -676,7 +676,7 @@ func findMode(root *TreeNode) []int { } ``` -## JavaScript +### JavaScript 使用额外空间map的方法 ```javascript @@ -753,7 +753,7 @@ var findMode = function(root) { }; ``` -## TypeScript +### TypeScript > 辅助Map法 @@ -852,7 +852,7 @@ function findMode(root: TreeNode | null): number[] { }; ``` -## Scala +### Scala 暴力: ```scala @@ -923,7 +923,7 @@ object Solution { } ``` -## rust +### Rust 递归: @@ -1015,3 +1015,4 @@ pub fn find_mode(root: Option>>) -> Vec { +