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