Modo en el árbol de búsqueda binaria de LeetCode

1. Título

Inserte la descripción de la imagen aquí


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);

Supongo que te gusta

Origin blog.csdn.net/weixin_43967679/article/details/108771528
Recomendado
Clasificación