A largura máxima da árvore binária

Tópico Descrição:
Dada uma árvore binária, escrever uma função para obter a largura máxima da árvore. Largura é a largura máxima de todas as camadas de árvores. A árvore binária com a árvore completa binária (árvore binária completa) a mesma estrutura, mas alguns dos nós está vazio.

O comprimento da largura de cada camada é definida como dois pontos de extremidade (a camada mais à esquerda e mais à direita do nó não nulo, o nó nulo entre os dois pontos finais também estão incluídos comprimento) entre.

Método um:

  • Na ordem de prioridade de profundidade, registramos pos cada nó. Para cada profundidade chega a uma primeira posição será gravado no mapa.
  • Em seguida, para cada nó, que corresponde à largura desta camada pode ser pos - map.get (pos) + 1
  • Cada vez que o valor máximo é a largura máxima do 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);
        }
    }
}

Método dois:

  • A árvore binária é armazenado no conjunto de índices, o índice raiz é 0, uma sub-árvore esquerda do nó 2 * i + 1, a sub-árvore direita chamado 2 * i + 2.
  • A largura máxima e, em seguida, atravessa o nível, para identificar cada um dos
/**
 * 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;
    }
}
Publicado 163 artigos originais · ganhou elogios 13 · vista 3778

Acho que você gosta

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