Estructuras de datos y algoritmos: recursividad

La recursividad es un algoritmo (o técnica de programación) muy utilizado. La recursividad se utiliza en la implementación de codificación de muchas estructuras de datos y algoritmos, como la búsqueda en profundidad de DFS, el recorrido de árbol binario de orden medio frontal, etc.

Los problemas recursivos deben tener características:

  1. 145. Recorrido posterior al pedido de un árbol binario - LeetCode Un problema se puede descomponer en soluciones a varios subproblemas
  2. La escala del problema y el subproblema es diferente, y el pensamiento de resolver el problema es exactamente el mismo
  3. Hay una condición de terminación recursiva.

Por ejemplo: ahora estas viendo una pelicula en un cine, y quieres saber en que fila estas, entonces le puedes preguntar a la persona de la fila anterior cual fila es, y sumarle 1 a la suya es la respuesta, luego el sub -la pregunta en este ejemplo es la anterior Una fila es la primera fila, y la condición de terminación es que cuando se alcance la primera fila, las personas en la primera fila sabrán naturalmente que están en la primera fila.

El proceso de ir está a la mano.

el proceso de volver

El problema recursivo principalmente tiene que encontrar la fórmula recursiva:

En el ejemplo anterior:

El número de filas en las que estás = el número de personas en la fila anterior + 1

Es la fórmula recursiva.

Problema clásico de recursión: secuencia de Fibonacci

Fórmula recursiva: f(n)=f(n-1)+f(n-2)

Condición de terminación: f(1)=1 f(2)=1 

Pasos para resolver un problema recursivo:

  1. Descomponga el subproblema y encuentre la fórmula de recurrencia
  2. Averigüe la condición de terminación

Escribiendo código específico:

  1. Parámetros de función de función recursiva y valor de retorno (el parámetro de la función recursiva son los datos que se procesarán, y el valor de retorno se juzga de acuerdo con la situación específica)

  2. La condición de terminación de la función recursiva (parámetros recursivos o algo así como un contador, preste atención al valor devuelto)

94. Recorrido en orden del árbol binario - LeetCode

Recorrido en orden de un árbol binario

El recorrido en orden es izquierdo, medio y derecho. Primero, se visita el nodo en la parte superior del árbol binario, y luego se visita capa por capa hasta que llega a la parte inferior del lado izquierdo del árbol, y luego comienza para procesar el nodo.

Para esta pregunta necesitamos devolver la secuencia del recorrido en orden del árbol binario:

Por lo tanto, la configuración del parámetro es: nodo de árbol, una matriz que almacena valores de nodo

el código se muestra a continuación:

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

La versión recursiva del recorrido previo y posterior al pedido del árbol binario es similar al código anterior

Enlace del tema:

144. Pedido anticipado de Traversal of Binary Tree - LeetCode

145. Recorrido posterior al orden del árbol binario - LeetCode
 

Supongo que te gusta

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