501. 二叉搜索树中的众数

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

假定 BST 有如下定义:

结点左子树中所含结点的值小于等于当前结点的值
结点右子树中所含结点的值大于等于当前结点的值
左子树和右子树都是二叉搜索树
例如:
给定 BST [1,null,2,2],

1
\
2
/
2
返回[2].

提示:如果众数超过1个,不需考虑输出顺序

进阶:你可以不使用额外的空间吗?(假设由递归产生的隐式调用栈的开销不被计算在内)

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-mode-in-binary-search-tree

class Solution {
    List<Integer>list=new ArrayList<>();
    TreeNode preNode=null;
    int max=0,cnt=0;
    public int[] findMode(TreeNode root) {
        helper(root);
        int[] res=new int[list.size()];
        for(int i=0;i<res.length;i++){
            res[i]=list.get(i);
        }
        return res;
    }
    private void helper(TreeNode root){
        if(root ==null)return;
        helper(root.left);
        if(preNode!=null&&root.val==preNode.val){
            cnt++;
        }
        else cnt=1;
        if(cnt>max){
            list.clear();
            list.add(root.val);
            max=cnt;
        }
        else if(cnt==max){
            list.add(root.val);
        }
        preNode=root;
        helper(root.right);
    }
}

 

posted @ 2020-09-24 10:38  XXXSANS  阅读(158)  评论(0编辑  收藏  举报