当前位置:   article > 正文

LeetCode-501. 二叉搜索树中的众数(Golang实现)_众数计算golang代码实现

众数计算golang代码实现

LeetCode题号:501. 二叉搜索树中的众数

给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素)。
例如:
给定 BST [1,null,2,2],

   1
    \
     2
    /
   2
返回  [2]

注意:

是输出众数,如果没有重复值,那么就全部输出!

解题思路
1、前序遍历 统计出所有重复数 存入map
2、遍历map 输入众数

代码:

  1. /**
  2.  * Definition for a binary tree node.
  3.  * type TreeNode struct {
  4.  *     Val int
  5.  *     Left *TreeNode
  6.  *     Right *TreeNode
  7.  * }
  8.  */
  9. func findMode(root *TreeNode) []int {
  10.     var m = make(map[int]int)
  11.     m = traverses(m, root)
  12.     var list1 []int
  13.     var list2 []int
  14.     var max int = 1
  15.     for k, v := range m {
  16.         if v > max {
  17.             max = v
  18.             //清空与max值相等而追加进list2中的元素,保证进list2中的重复值必须是最大或等大的
  19.             list2 = []int{}
  20.         }
  21.         //追加与max相等的元素
  22.         if v == max && v != 1 {
  23.             list2 = append(list2, k)
  24.         }
  25.         //目的是考虑没有重复值的情况下,直接返回该list1即可
  26.         list1 = append(list1, k)
  27.     }
  28.     //说明没有重复值,都是众数
  29.     if max == 1 {
  30.         return list1
  31.     }
  32.     return list2
  33. }
  34. //先序遍历
  35. func traverses(m map[int]int, node *TreeNode) map[int]int {
  36.     if node == nil {
  37.         return map[int]int{}
  38.     }
  39.     //累加重复值
  40.     m[node.Val]++
  41.     traverses(m, node.Left)
  42.     traverses(m, node.Right)
  43.     return m
  44. }

 往期回顾:

【1】LeetCode-617. 合并二叉树(Goland实现)

【2】LeetCode-104. 二叉树的最大深度(Goland实现) 

【3】LeetCode-111. 二叉树的最小深度(Goland实现)


❤如果文章对您有所帮助,就在文章的右上角或者文章的末尾点个赞吧!(づ ̄ 3 ̄)づ 

❤如果喜欢大白兔分享的文章,就给大白兔点个关注吧!(๑′ᴗ‵๑)づ╭❤~

❤对文章有任何问题欢迎小伙伴们下方留言或者入群探讨【群号:708072830】

❤鉴于个人经验有限,所有观点及技术研点,如有异议,请直接回复讨论(请勿发表攻击言论)

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号