1. Introducción al tema
Dado un árbol binario, cada nodo contiene un valor entero (el valor es positivo o negativo). Diseñe un algoritmo para imprimir el número de todas las rutas cuya suma de valores de nodo sea igual a un valor dado. Tenga en cuenta que la ruta no necesariamente tiene que comenzar o terminar desde el nodo raíz o el nodo hoja del árbol binario, pero su dirección debe ser hacia abajo (solo desde el nodo padre al nodo hijo).
Ejemplo:
dado el siguiente árbol binario y la suma de la suma objetivo = 22,
5
/ \
4 8
/ / \
11 13 4
/ \ / \
7 2 5 1
Volver:
3
Explicación: La ruta donde la suma es 22 es: [5,4,11,2], [5,8,4,5], [4,11,7]
Consejos:
Número total de nodos <= 10000
Fuente: LeetCode
Enlace: https://leetcode-cn.com/problems/paths-with-sum-lcci
Copyright es propiedad de LeetCode . Para reimpresiones comerciales, comuníquese con la autorización oficial. Para reimpresiones no comerciales, indique la fuente.
Dos ideas para resolver problemas
Esta pregunta utiliza DFS de doble capa para buscar y, finalmente, encuentra el número de todas las rutas que cumplen con los requisitos. Consulte el código para obtener más detalles.
Tres, código de resolución de problemas
class Solution {
public:
int res = 0;
int pathSum(TreeNode* root, int sum) {
if(!root)
return res;
dfs(root, sum); //计算以根节点为起点时,所得结果
pathSum(root->left, sum); //计算以左子节点为起点时,所得结果
pathSum(root->right, sum);//计算以右子节点为起点时,所得结果
return res;
}
void dfs(TreeNode* root, int sum)
{
if(!root)
return;
int curNum = root->val;
if(curNum == sum) res++;
dfs(root->left, sum-curNum);
dfs(root->right, sum-curNum);
}
};