本题要求是在二叉排序树中找出众数,可以在中序遍历的过程中就将当前的众数存储在数组里,也可以先中序遍历得到有序数组后再对数组进行处理得到众数的数组。
代码如下:
public class lc501{
int count = 0;
int maxCount = 1;
int currentNum = -1;
List<Integer> ans = new ArrayList<>();
public int[] findMode(TreeNode root) {
if(root==null) return new int[]{};
bfs(root);
int[] mostNums = new int[ans.size()];
for(int index=0;index<ans.size();index++){
mostNums[index] = ans.get(index);
}
return mostNums;
}
public void bfs(TreeNode node){
if(node == null) return;
bfs(node.left);
if(node.val==currentNum){
count++;
}else {
currentNum = node.val;
count = 1;
}
if(count == maxCount){
ans.add(node.val);
}else if (count > maxCount){
ans.clear();
ans.add(node.val);
maxCount = count;
}
bfs(node.right);
}
}