原题:#501_二叉搜索树中的众数
- 二叉搜索树是一个非递减序列,所以只需要比较当前节点与前一节点pre的值即可
- 如果pre不存在,则当前节点为第一个节点,直接将该值放入数组,计数为1
- 如果pre存在
- 如果pre的值等于当前的值,则计数加1
- 如果pre的值不等于当前值,计数置为1
- 计数与已有最值比较
- 如果当前计数大于已有最值,则更新最值,清空数组,添加当前节点的值
- 如果当前计数等于已有最值,则直接添加当前值到数组
int preVal = 0, curTimes = 0, maxTimes = 0;
ArrayList<Integer> list = new ArrayList<Integer>();
public int[] findMode(TreeNode root) {
traversal(root);
int size = list.size();
int[] ans = new int[size];
for(int i = 0; i < size; i++){
ans[i] = list.get(i);
}
return ans;
}
public void traversal(TreeNode root){
if(root != null){
traversal(root.left);
if(preVal == root.val){
curTimes++;
}else{
preVal = root.val;
curTimes = 1;
}
if(curTimes == maxTimes){
list.add(root.val);
}else if(curTimes > maxTimes){
list.clear();
list.add(root.val);
maxTimes = curTimes;
}
traversal(root.right);
}
}