[LeetCode By Go 92]501. Find Mode in Binary Search Tree

题目

Given a binary search tree (BST) with duplicates, find all the mode(s) (the most frequently occurred element) in the given BST.
Assume a BST is defined as follows:
The left subtree of a node contains only nodes with keys less than or equal to the node's key.
The right subtree of a node contains only nodes with keys greater than or equal to the node's key.
Both the left and right subtrees must also be binary search trees.

For example:Given BST [1,null,2,2],

   1
    \
     2
    /
   2

return [2].
Note: If a tree has more than one mode, you can return them in any order.
Follow up: Could you do that without using any extra space? (Assume that the implicit stack space incurred due to recursion does not count).

解题思路

遍历二叉树,将所有节点的值和出现的次数放入map中,找到出现次数最多的值,输出

代码

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
var numMap map[int]int
func preOrderTravel(t *TreeNode)  {
    if nil == t {
        return
    }
    numMap[t.Val]++

    preOrderTravel(t.Left)
    preOrderTravel(t.Right)
}

func findMode(root *TreeNode) []int {
    numMap = make(map[int]int)
    preOrderTravel(root)

    fmt.Printf("numMap:%+v\n", numMap)
    type Mode struct {
        time int
        val int
    }
    var maxMode []Mode
    for v, time := range numMap {
        if len(maxMode) == 0 || time > maxMode[0].time {
            tmpMode := Mode{time, v}
            maxMode = []Mode{tmpMode}
        } else if time == maxMode[0].time {
            tmpMode := Mode{time, v}
            maxMode = append(maxMode, tmpMode)
        }
    }

    fmt.Printf("maxMode:%+v\n", maxMode)
    var ret []int
    for _, v := range maxMode {
        ret = append(ret, v.val)
    }
    return ret 
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,962评论 0 33
  • 我觉得成长当中最大的坑就是认为商都是改变不了的,智商或者情商。说改变不了是因为改变是痛苦的,需要学习,需要走出舒适...
    RealStudios_Zee阅读 368评论 0 0
  • 稿费,实际并不多,区区几百元,但相较于以往收到的几十之类的,已然算大笔了。 我写东西,初衷就是能够在“钱”上有所斩...
    山顶的声音阅读 276评论 5 7
  • 前言 面向对象编程就是将你的需求抽象成一个对象,针对这个对象分析其特征(属性)和动作(方法),这个对象称为“类”。...
    kMacro阅读 622评论 0 5

友情链接更多精彩内容