1.题目
2.思路(Java语言描述)
中序遍历过程中记录Max,将所有节点用Map做一个映射,最后遍历Map,选出符合条件的key即可
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
Map<Integer,Integer> map = new HashMap<Integer,Integer>();
int max = 0;
public int[] findMode(TreeNode root) {
centerOrder(root,map);
return mapToIntegerArray(map);
}
public void centerOrder(TreeNode root,Map<Integer,Integer> map){
if(root!=null){
centerOrder(root.left,map);
int speed = map.getOrDefault(root.val,0)+1;
if(max<speed){
max = speed;
}
map.put(root.val,speed);
centerOrder(root.right,map);
}
}
public int[] mapToIntegerArray(Map<Integer,Integer> map){
if(map == null){
return null;
}
Iterator<Map.Entry<Integer,Integer>> entries = map.entrySet().iterator();
ArrayList<Integer> list = new ArrayList<Integer>();
while(entries.hasNext()){
Map.Entry<Integer,Integer> entry = entries.next();
int tmp = entry.getValue();
if(tmp == max){
list.add(entry.getKey());
}
}
int[] result = new int[list.size()];
int cnt=0;
for(Integer num:list){
result[cnt++] = num.intValue();
}
return result;
}
}
3.关于Map的知识点复习
1.遍历Map效率最高的是用Iterator迭代器遍历
Iterator<Map.Entry<Integer,Integer>> entries = map.entrySet().iterator();
while(entries.hasNext()){
Map.Entry<Integer,Integer> entry = entries.next();
System.out.println("key: "+entry.getKey()+", value: "+entry.getValue());
}
2.map.getOrDefault()
//如果map中有存储key的value,则 temp = map.get(key)
//否则 temp = 0;
int temp = map.getOrDefault(key,0);