思路: 正常来说,中序遍历得到非递减数组,然后求数组众数即可,但消耗额外空间;
已知遍历顺序肯定是非递减,如果有相同的数肯定连在一起,可以在遍历途中维护一个表示当前数字出现几次的count ,当前出现最对的次数maxCount ,和记录前一个节点pre
cur==pre; count++; - 否则,清空count
- 如果
count>maxCount ,清空res,重新开始记录
class Solution {
List<Integer>res=new ArrayList<>();
TreeNode pre=null;
int count=0;
int maxCount=0;
public int[] findMode(TreeNode root) {
find(root);
return res.stream().mapToInt(Integer::intValue).toArray();
}
public void find(TreeNode root){
if(root==null) return;
find(root.left);
int cur=root.val;
if(pre==null || root.val!=pre.val) count=1;
else count++;
if(count==maxCount){
res.add(root.val);
}else if(count>maxCount){
res.clear();
res.add(root.val);
maxCount=count;
}
pre=root;
find(root.right);
}
}
|