Estruturas de Dados e Algoritmos - Recursão

A recursão é um algoritmo (ou técnica de programação) amplamente utilizado. A recursão é usada na implementação de codificação de muitas estruturas de dados e algoritmos, como busca em profundidade DFS, travessia de árvore binária de ordem intermediária frontal e assim por diante.

Problemas recursivos precisam ter características:

  1. 145. Percurso pós-ordem de uma árvore binária - LeetCode Um problema pode ser decomposto em soluções para vários subproblemas
  2. A escala do problema e subproblema é diferente, e o pensamento de resolver o problema é exatamente o mesmo
  3. Existe uma condição de terminação recursiva

Por exemplo: Agora você está assistindo a um filme no cinema e quer saber em qual linha você está, então você pode perguntar à pessoa da linha anterior em qual linha está, e adicionar 1 à dele é a resposta, então o sub -a pergunta neste exemplo é a linha A anterior é a primeira linha, e a condição de término é que, quando a primeira linha for alcançada, as pessoas na primeira linha saberão naturalmente que estão na primeira linha.

O processo de ir é à mão

o processo de voltar

O problema recursivo tem principalmente que encontrar a fórmula recursiva:

No exemplo anterior:

O número de linhas em que você está = o número de pessoas na linha anterior + 1

É a fórmula recursiva.

Problema Clássico de Recursão: Sequência de Fibonacci

Fórmula de recursão: f(n)=f(n-1)+f(n-2)

Condição de rescisão: f(1)=1 f(2)=1 

Etapas para resolver um problema recursivo:

  1. Decomponha o subproblema e encontre a fórmula de recorrência
  2. Descubra a condição de rescisão

Escrevendo código específico:

  1. Parâmetros de função de função recursiva e valor de retorno (o parâmetro da função recursiva são os dados a serem processados ​​e o valor de retorno é julgado de acordo com a situação específica)

  2. A condição de término da função recursiva (parâmetros recursivos ou algo como um contador, preste atenção ao valor retornado)

94. Traversal inorder da árvore binária - LeetCode

Traversal inorder de uma árvore binária

A travessia em ordem é esquerda, meio e direita. Primeiro, o nó no topo da árvore binária é visitado e, em seguida, é visitado camada por camada até atingir a parte inferior do lado esquerdo da árvore e, em seguida, começa para processar o nó.

Para esta questão precisamos retornar a sequência do percurso inorder da árvore binária:

Portanto, a configuração do parâmetro é: nó da árvore, uma matriz que armazena os valores dos nós

código mostra como abaixo:

struct TreeNode{
    TreeNode* left;
    TreeNode* right;
    int val;
    //构造函数
    TreeNode():val(0),left(nullptr),right(nullptr){};
    TreeNode(int v):val(v),left(nullptr),right(nullptr){};
    TreeNode(int v,TreeNode* l,TreeNode* r):val(v),left(l),right(r){};
}


class Solution {
public:
vector<TreeNode*> vec;
vector<int> inorderTraversal(TreeNode* root) {
       //存储结果的数组
       vector<int> res;
       inorder(root,res);
       return res;  
}
//递归函数
void inorder(TreeNode* root,vector<int>& res){
    if(!root){
        return;
    }
    else{
        inorder(root->left,res);
        res.push_back(root->val);
        inorder(root->right,res);
    }
}
};

A versão recursiva da travessia de pré-ordem e pós-ordem da árvore binária é semelhante ao código acima

Link do tópico:

144. Traversal de pré-encomenda da árvore binária - LeetCode

145. Traversal de pós-ordem da árvore binária - LeetCode
 

Acho que você gosta

Origin blog.csdn.net/qq_53633989/article/details/130450654
Recomendado
Clasificación