Aldea algorítmica de despacho de aduanas: el problema de los elementos de procesamiento de árboles binarios en cada capa

1. Encuentra el valor máximo en cada fila del árbol

Dada la raíz del nodo raíz de un árbol binario, encuentre el valor máximo de cada nivel en el árbol binario.

Entrada: raíz = [1,3,2,5,3,null,9]
Salida: [1,3,9]

Todavía escriba primero el recorrido del orden de las capas, pero el valor máximo de la capa actual debe guardarse durante el proceso de recorrido.

    public List<Integer> largestValues(TreeNode root) {
    
    
        if(root == null) return new ArrayList<Integer>();
        List<Integer> res = new ArrayList<Integer>();
        LinkedList<TreeNode> queue = new LinkedList<>();
        queue.add(root);
        while(queue.size()>0){
    
    
            int size = queue.size();
            Integer max  = Integer.MIN_VALUE;
            for(int i=0;i<size;i++){
    
    
                TreeNode temp = queue.remove();
                max = Math.max(temp.val,max);
                if(temp.left!=null) queue.add(temp.left);
                if(temp.right!=null)  queue.add(temp.right);
            }
            res.add(max);
        }
        return res;
    }

inserte la descripción de la imagen aquí

2. Promedio de capas del árbol binario

637. Promedio de capas de un árbol binario

Dada la raíz del nodo raíz de un árbol binario no vacío, devuelva el valor promedio de cada capa de nodos en forma de matriz. Se aceptan respuestas dentro de 10-5 de la respuesta real.

Entrada: root = [3,9,20,null,null,15,7]
Salida: [3.00000,14.50000,11.00000]
Explicación: El promedio de la capa 0 es 3, el promedio de la capa 1 es 14.5, el promedio de la capa 2 El valor medio de las capas es 11.
Volviendo así [3, 14.5, 11] .

 public List<Double> averageOfLevels(TreeNode root) {
    
    
        List<Double> res = new ArrayList<>();
        if(root == null) return res;
        Deque<TreeNode> queue = new ArrayDeque<>();
        queue.add(root);
        while(queue.size()>0){
    
    
            Double sum = 0.0;
            int size = queue.size();
            for(int i=0;i<size;i++){
    
    
            TreeNode temp = queue.remove();
            sum+=temp.val;
            if(temp.left!=null) queue.add(temp.left);
            if(temp.right!=null) queue.add(temp.right);
            
            }
            res.add(sum/size);
        }
        return res;
    }

inserte la descripción de la imagen aquí

3. La vista correcta del árbol binario

La vista correcta de un árbol binario
Dada la raíz del nodo raíz de un árbol binario, imagínese parado en su lado derecho y devuelva los valores de nodo que se pueden ver desde el lado derecho en orden de arriba hacia abajo.
Entrada: [1,2,3, nulo, 5, nulo, 4]
Salida: [1,3,4]

3.1 Recorrido de secuencia de capas + registro del último elemento de cada capa

public List<Integer> rightSideView(TreeNode root) {
    
    
        List<Integer> res = new ArrayList<>();
        if(root == null) return res;
        Deque<TreeNode> queue = new LinkedList<>();
        queue.add(root);
        while(queue.size()>0){
    
    
            int size = queue.size();
            for(int i=0;i<size;i++){
    
    
                TreeNode temp = queue.remove();
                if(temp.left != null) queue.add(temp.left);
                if(temp.right!=null) queue.add(temp.right);
                // 记录每层最后一个元素
                if(i==size-1){
    
    
                    res.add(temp.val);
                }
            }
        }
        return  res;
    }

inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/qq_52843958/article/details/132045437
Recomendado
Clasificación