题目
解题思路
- 二叉搜索树经过中序遍历可以看作有序数组。
- 有序数组判断该元素出现频率,只需要记录该元素第一次出现,到出现其他元素为止出现的次数,例如[1, 2, 2, 2, 3],2出现的频率为3次。
- 满足上述要求,需要将上一个节点和当前节点进行判断。例如,a=[1,2,2,2,3], a[3] != a[4]那么2出现次数就为3。
- 使用maxCount记录最高频率,count记录每一个元素出现的频率,resultList记录最高频率元素。
- 若出现某元素count>maxCount,则清空resultList,并添加该元素,若等于则直接该元素,小于则不用管。
List<Integer> resultList;
int maxCount;
int count;
TreeNode pre;
public int[] findMode(TreeNode root) {
resultList = new ArrayList<>();
maxCount = 0;
count = 0;
pre = null;
dfs(root);
int[] result = new int[resultList.size()];
for(int i = 0; i < resultList.size(); i++) result[i] = resultList.get(i);
return result;
}
public void dfs(TreeNode root){
if(root == null) return;
dfs(root.left);
int elementValue = root.val;
if(pre == null || root.val != pre.val){
count = 1;
}else count++;
if(count > maxCount){
resultList.clear();
resultList.add(root.val);
maxCount = count;
}else if(count == maxCount) {
resultList.add(root.val);
}
pre = root;
dfs(root.right);
}