1. Título
2. Ideas (descripción en lenguaje Java)
Registre Max durante el proceso de recorrido de orden medio, mapee todos los nodos con Map, y finalmente atraviese el Map, y seleccione la clave que cumpla con las condiciones.
/**
* 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. Revisión de puntos de conocimiento sobre Map
1. La forma más eficiente de atravesar el mapa es usar Iterator para atravesar
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);