La anchura máxima del árbol binario

Descripción Tema:
Dado un árbol binario, escribir una función para obtener la máxima anchura del árbol. La anchura es la anchura máxima de todas las capas de los árboles. El árbol binario con el árbol completo binario (árbol binario completo) la misma estructura, pero algunos de los nodos está vacía.

La longitud de la anchura de cada capa se define como dos puntos finales (la capa más a la izquierda y más a la derecha de nodo no nulo, el nodo nulo entre los dos puntos finales también están incluidos longitud) entre.

Método uno:

  • En el orden de prioridad de la profundidad, registramos pos cada nodo. Para cada alcances de profundidad se grabará una primera posición en el mapa.
  • Entonces, para cada nodo, que corresponde a la anchura de esta capa puede ser pos - map.get (pos) + 1
  • Cada vez que el valor máximo es la anchura máxima del registro
/**
 * 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<>();
    int res=0;
    public int widthOfBinaryTree(TreeNode root) {
        func(root,0,0);
        return res;
    }
    void func(TreeNode root,int height,int pos){
        if(root!=null){
            map.computeIfAbsent(height,value->pos);
            res=Math.max(res,pos-map.get(height)+1);
            func(root.left,height+1,pos*2);
            func(root.right,height+1,pos*2+1);
        }
    }
}

Segundo método:

  • El árbol binario se almacena en el conjunto de índices, el índice raíz es 0, un subárbol izquierdo del nodo 2 * i + 1, el subárbol derecho etiquetada 2 * i + 2.
  • La anchura máxima y luego atraviesan el nivel, para identificar cada uno de
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public int widthOfBinaryTree(TreeNode root) {
        if(root==null){
            return 0;
        }
        Queue<TreeNode> q=new LinkedList<>();
        q.offer(root);
        List<Integer> list=new LinkedList<>();
        list.add(0);
        int max=1;
        while(!q.isEmpty()){         
            int size=q.size();
            for(int i=0;i<size;i++){
                TreeNode tmp=q.poll();
                int node=list.remove(0);
                if(tmp.left!=null){
                    q.offer(tmp.left);
                    list.add(node*2+1);
                }
                if(tmp.right!=null){
                    q.offer(tmp.right);
                    list.add(node*2+2);
                }
            }
            if(list.size()>=2){
                max=Math.max(max,list.get(list.size()-1)-list.get(0)+1);
            }
        }
        return max;
    }
}
Publicados 163 artículos originales · alabanza ganado 13 · vistas 3778

Supongo que te gusta

Origin blog.csdn.net/qq_42174669/article/details/105018761
Recomendado
Clasificación