mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-09 02:53:31 +08:00
添加0071.0501.二叉搜索树中的众数 go版本
添加0071.0501.二叉搜索树中的众数 go版本
This commit is contained in:
@ -428,7 +428,100 @@ class Solution:
|
|||||||
return self.res
|
return self.res
|
||||||
```
|
```
|
||||||
Go:
|
Go:
|
||||||
|
暴力法(非BSL)
|
||||||
|
|
||||||
|
```go
|
||||||
|
/**
|
||||||
|
* Definition for a binary tree node.
|
||||||
|
* type TreeNode struct {
|
||||||
|
* Val int
|
||||||
|
* Left *TreeNode
|
||||||
|
* Right *TreeNode
|
||||||
|
* }
|
||||||
|
*/
|
||||||
|
func findMode(root *TreeNode) []int {
|
||||||
|
var history map[int]int
|
||||||
|
var maxValue int
|
||||||
|
var maxIndex int
|
||||||
|
var result []int
|
||||||
|
history=make(map[int]int)
|
||||||
|
traversal(root,history)
|
||||||
|
for k,value:=range history{
|
||||||
|
if value>maxValue{
|
||||||
|
maxValue=value
|
||||||
|
maxIndex=k
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for k,value:=range history{
|
||||||
|
if value==history[maxIndex]{
|
||||||
|
result=append(result,k)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
func traversal(root *TreeNode,history map[int]int){
|
||||||
|
if root.Left!=nil{
|
||||||
|
traversal(root.Left,history)
|
||||||
|
}
|
||||||
|
if value,ok:=history[root.Val];ok{
|
||||||
|
history[root.Val]=value+1
|
||||||
|
}else{
|
||||||
|
history[root.Val]=1
|
||||||
|
}
|
||||||
|
if root.Right!=nil{
|
||||||
|
traversal(root.Right,history)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
计数法BSL(此代码在执行代码里能执行,但提交后报错,不知为何,思路是对的)
|
||||||
|
|
||||||
|
```go
|
||||||
|
/**
|
||||||
|
* Definition for a binary tree node.
|
||||||
|
* type TreeNode struct {
|
||||||
|
* Val int
|
||||||
|
* Left *TreeNode
|
||||||
|
* Right *TreeNode
|
||||||
|
* }
|
||||||
|
*/
|
||||||
|
var count,maxCount int //统计计数
|
||||||
|
func findMode(root *TreeNode) []int {
|
||||||
|
var result []int
|
||||||
|
var pre *TreeNode //前指针
|
||||||
|
if root.Left==nil&&root.Right==nil{
|
||||||
|
result=append(result,root.Val)
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
traversal(root,&result,pre)
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
func traversal(root *TreeNode,result *[]int,pre *TreeNode){//遍历统计
|
||||||
|
//如果BSL中序遍历相邻的两个节点值相同,则统计频率;如果不相同,依据BSL中序遍历排好序的性质,重新计数
|
||||||
|
if pre==nil{
|
||||||
|
count=1
|
||||||
|
}else if pre.Val==root.Val{
|
||||||
|
count++
|
||||||
|
}else {
|
||||||
|
count=1
|
||||||
|
}
|
||||||
|
//如果统计的频率等于最大频率,则加入结果集;如果统计的频率大于最大频率,更新最大频率且重新将结果加入新的结果集中
|
||||||
|
if count==maxCount{
|
||||||
|
*result=append(*result,root.Val)
|
||||||
|
}else if count>maxCount{
|
||||||
|
maxCount=count//重新赋值maxCount
|
||||||
|
*result=[]int{}//清空result中的内容
|
||||||
|
*result=append(*result,root.Val)
|
||||||
|
}
|
||||||
|
pre=root//保存上一个的节点
|
||||||
|
if root.Left!=nil{
|
||||||
|
traversal(root.Left,result,pre)
|
||||||
|
}
|
||||||
|
if root.Right!=nil{
|
||||||
|
traversal(root.Right,result,pre)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user