Pontos de conhecimento relacionados à árvore - notas espalhadas

Compreensão profunda da sequência frontal, intermediária e posterior

  1. Qual é a travessia de ordem anterior, intermediária e posterior de uma árvore binária?

    1. Percurso de ordem frontal, intermediária e posterior, ou seja, as posições frontal, intermediária e posterior da estrutura da árvore binária
      1. Traversal de pré-ordem - isto é, ao entrar em um nó
      2. Percurso em ordem - isto é, antes de deixar o nó depois de entrar no nó
      3. Percurso pós-ordem - isto é, ao sair do primeiro nó
    2. 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
      1. Antes - execute ao entrar em um nó de árvore binária
      2. Depois - Executado quando um nó de árvore binária está prestes a ser deixado
      3. Middle – Executado quando a subárvore esquerda de uma árvore binária foi percorrida e a subárvore direita está prestes a ser percorrida
  2. O que há de especial na travessia de pós-ordem?

    1. O código na posição de pré-encomenda só pode obter os dados passados ​​pelo nó pai dos parâmetros da função
    2. 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.
  3. Por que não há travessia em ordem de uma árvore multi-bifurcação?

    1. Cada nó na árvore binária só alternará as subárvores esquerda e direita uma vez
    2. Uma árvore multi-bifurcação pode ter muitos nós filhos, e a subárvore será alternada várias vezes para percorrer
    3. 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

  1. A solução recursiva para o problema da árvore binária pode ser dividida em dois tipos de ideias
    1. A primeira categoria: percorrer a árvore binária para obter a resposta, ou seja, a estrutura central do algoritmo de retrocesso
    2. A segunda categoria: calcule a resposta decompondo o problema, ou seja, a estrutura central da programação dinâmica
  2. É possível obter a resposta percorrendo a árvore binária uma vez
  3. É possível definir uma função recursiva para deduzir a resposta da questão original através da resposta da subquestão (subárvore)?
    1. Se puder, pense cuidadosamente sobre como definir funções recursivas

A importância da travessia inorder

  1. Traversal inorder percorre na ordem esquerda-raiz-direita
  2. 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

  1. O código na posição de pré-encomenda só pode obter os dados passados ​​pelo nó pai dos parâmetros da função
  2. 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
  3. Instruções para usar exemplos
    1. 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);
  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

  1. Se possível, tente usar funções que não retornam um valor como funções recursivas
    1. Isso reduzirá o uso de espaço extra
  2. 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/

Acho que você gosta

Origin blog.csdn.net/GoNewWay/article/details/130787323
Recomendado
Clasificación