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:
- 145. Recorrido posterior al pedido de un árbol binario - LeetCode Un problema se puede descomponer en soluciones a varios subproblemas
- La escala del problema y el subproblema es diferente, y el pensamiento de resolver el problema es exactamente el mismo
- 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:
- Descomponga el subproblema y encuentre la fórmula de recurrencia
- Averigüe la condición de terminación
Escribiendo código específico:
-
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)
-
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