class Solution {
//定义一个众数的最大数量值
int maxCount = 0;
//定义一个当前众数节点的数量
int count = 0;
//定义当前众数节点的值
int cur = 0;
//存放众数的集合
List<Integer> list = new ArrayList<>();
public int[] findMode(TreeNode root) {
inOrderTree(root);
int[] res = new int[list.size()];
for(int i = 0;i<list.size();i++){
res[i] = list.get(i);
}
return res;
}
public void inOrderTree(TreeNode root){
//边界条件
if(root == null) return;
//先遍历左子树
inOrderTree(root.left);
//逻辑判断,找出众数
//如果节点的值等于cur,count+1
if(root.val == cur){
count++;
}else{//如果不等于,说明是新的值,此时更新cur,count
cur = root.val;
count = 1;
}
//如果count等于 maxCount,说明当前节点的数量 等于最大的数量
if(count == maxCount){
list.add(root.val);
}else if(count > maxCount){//说明当前节点的数量是最多的,应该把list清空,把最多的节点放入,同时更新maxCount
list.clear();
list.add(root.val);
maxCount = count;
}
//遍历右子树
inOrderTree(root.right);
}
}