leetcode 501. 二叉搜索树中的众数

一、题目

给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。

如果树中有不止一个众数,可以按 任意顺序 返回。

假定 BST 满足如下定义:

结点左子树中所含节点的值 小于等于 当前节点的值
结点右子树中所含节点的值 大于等于 当前节点的值
左子树和右子树都是二叉搜索树

输入:root = [1,null,2,2]
输出:[2]

二、解法

中序遍历。

class Solution {
    List<Integer> list=new LinkedList<>();
    Integer prev,cnt,maxCnt=1;

    public int[] findMode(TreeNode root) {
        dfs(root);
        int[] ans=new int[list.size()];
        for(int i=0;i<list.size();i++) ans[i]=list.get(i);
        return ans;
    }

    void dfs(TreeNode root){
        if(root==null) return;
        dfs(root.left);

        if(prev!=null&&prev==root.val){
            cnt++;
        }else{
            prev=root.val;
            cnt=1;
        }
        if(cnt==maxCnt){
            list.add(prev);
        }else if(cnt>maxCnt){
            list.clear();
            list.add(prev);
            maxCnt=cnt;
        }

        dfs(root.right);
    }
}
posted @ 2022-02-15 18:07  livingsu  阅读(31)  评论(0)    收藏  举报