leetcode501二叉搜索树中的众数

leetcode 501 Find Mode in Binary Search Tree

Posted by BY on September 24, 2020

前言

持续更新了

正文

问题来源

本问题来自leetcode上的501题。

问题描述

给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素)。
假定 BST 有如下定义:
结点左子树中所含结点的值小于等于当前结点的值
结点右子树中所含结点的值大于等于当前结点的值
左子树和右子树都是二叉搜索树

示例 1:

输入:   1
    \
     2
    /
   2
输出:[2]

分析:

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */

func findMode(root *TreeNode) []int {
    var cur int
    var count int
    var max int
    var res []int
    res = make([]int, 0)
    var dfs func(root *TreeNode)
    dfs = func(root *TreeNode) {
        if root == nil {
            return
        }
        dfs(root.Left)
        if root.Val == cur {
            count++
        } else {
            cur = root.Val
            count = 1
        }
        if count > max {
            res = res[:0]
            res = append(res, cur)
            max = count
        } else if max == count {
            res = append(res, cur)
        }
        dfs(root.Right)
    }
    dfs(root)
    return res
}

总结:

勤思考。

结语

不管怎么样好好加油。