Compreensão profunda da sequência frontal, intermediária e posterior
-
Qual é a travessia de ordem anterior, intermediária e posterior de uma árvore binária?
- Percurso de ordem frontal, intermediária e posterior, ou seja, as posições frontal, intermediária e posterior da estrutura da árvore binária
- Traversal de pré-ordem - isto é, ao entrar em um nó
- Percurso em ordem - isto é, antes de deixar o nó depois de entrar no nó
- Percurso pós-ordem - isto é, ao sair do primeiro nó
- A ordem frontal, intermediária e posterior são três pontos de tempo especiais para processar cada nó no processo de percorrer a árvore binária
- Antes - execute ao entrar em um nó de árvore binária
- Depois - Executado quando um nó de árvore binária está prestes a ser deixado
- Middle – Executado quando a subárvore esquerda de uma árvore binária foi percorrida e a subárvore direita está prestes a ser percorrida
- Percurso de ordem frontal, intermediária e posterior, ou seja, as posições frontal, intermediária e posterior da estrutura da árvore binária
-
O que há de especial na travessia de pós-ordem?
- O código na posição de pré-encomenda só pode obter os dados passados pelo nó pai dos parâmetros da função
- O código na posição subsequente pode não apenas obter os dados do parâmetro, mas também obter os dados retornados pela subárvore por meio do valor de retorno da função
1.
-
Por que não há travessia em ordem de uma árvore multi-bifurcação?
- Cada nó na árvore binária só alternará as subárvores esquerda e direita uma vez
- Uma árvore multi-bifurcação pode ter muitos nós filhos, e a subárvore será alternada várias vezes para percorrer
- Portanto, os nós multi-árvore não têm uma única posição de passagem em ordem
A natureza do problema da árvore binária
Todos os problemas com a árvore binária são para injetar lógica de código engenhosa nas posições de ordem frontal, intermediária e posterior para atingir o objetivo. Portanto, você só precisa pensar no que cada nó deve fazer separadamente, e o restante é entregue à estrutura de travessia da árvore binária, e a recursão fará a mesma operação em todos os nós.
ideias para resolução de problemas
- A solução recursiva para o problema da árvore binária pode ser dividida em dois tipos de ideias
- A primeira categoria: percorrer a árvore binária para obter a resposta, ou seja, a estrutura central do algoritmo de retrocesso
- A segunda categoria: calcule a resposta decompondo o problema, ou seja, a estrutura central da programação dinâmica
- É possível obter a resposta percorrendo a árvore binária uma vez
- É possível definir uma função recursiva para deduzir a resposta da questão original através da resposta da subquestão (subárvore)?
- Se puder, pense cuidadosamente sobre como definir funções recursivas
A importância da travessia inorder
- Traversal inorder percorre na ordem esquerda-raiz-direita
- Os dados percorridos têm uma natureza não decrescente, o que equivale a percorrer uma matriz ordenada
Características especiais da travessia de pós-ordem
- O código na posição de pré-encomenda só pode obter os dados passados pelo nó pai dos parâmetros da função
- O código de posição pós-sequência pode não apenas obter dados de parâmetro, mas também obter os dados passados pela subárvore por meio do valor de retorno
- Instruções para usar exemplos
- Se o nó raiz for considerado como a primeira camada, imprima o número da camada de cada nó?
void traverse(TreeNode root, int level) {
if(root == null) {
return;
}
// 前序位置
System.out.println("节点 " + root + " 在,第 " + level + " 层");
traverse(root.left, level + 1);
traverse(root.right, level + 1);
}
// 调用
traverse(root, 1);
- Como imprimir o número de nós nas subárvores esquerda e direita de cada nó?
int count(TreeNode root) {
if(root == null) {
return 0;
}
int leftCount = count(root.left);
int rightCount = count(root.right);
// 后序位置
System.out.println(leftCount);
System.out.println(rightCount);
return leftCount + rightCount + 1;
}
- A diferença entre as duas perguntas ab
- Em qual camada um nó está pode ser conhecido ao passar do nó raiz, porque pode ser registrado acidentalmente durante o processo de passagem
- Quantos nós existem em toda a subárvore enraizada em um nó? Você precisa percorrer a subárvore para saber quantos nós e obter a resposta por meio do valor de retorno da função recursiva
- Portanto, ao enfrentar um problema, é necessário analisar cuidadosamente se a solução do problema está relacionada ao subproblema ou se o resultado pode ser obtido diretamente por meio de travessia
Pontos notáveis
- Se possível, tente usar funções que não retornam um valor como funções recursivas
- Isso reduzirá o uso de espaço extra
- Pensar em como simplificar a lógica de julgamento tornará o código mais conciso e fácil de entender
referência
https://labuladong.github.io/algo/di-ling-zh-bfe1b/dong-ge-da-334dd/