leetcode501_二叉搜索树中的众数

利用BST的中序遍历是有序的这个特点即可,再使用树的双指针即可。
难点在于先处理time,再使用time去更新list。
然后双指针的初始化问题是双指针中经常遇到的问题。

class Solution {
    private TreeNode pre;
    private int maxTime = 0, time=0;
    private List<Integer> list = new ArrayList();
    public int[] findMode(TreeNode root) {
        if(root.left == null && root.right == null) return new int[]{root.val};
        traversal(root);
        return list.stream().mapToInt(Integer::intValue).toArray();
    }
    private void traversal(TreeNode root) {
        if(root == null) return;
        traversal(root.left);
        if(pre==null) time = 1;
        else if(pre.val == root.val) time++;
        else time = 1;
        pre = root;
        if(time > maxTime) {
            maxTime = time;
            list = new ArrayList();
            list.add(root.val);
        }
        else if(time == maxTime) {
            list.add(root.val);
        }
        traversal(root.right);
    }
}
posted @ 2022-03-06 15:53  明卿册  阅读(22)  评论(0编辑  收藏  举报