437. Path Sum III
437. Path Sum III
题目描述:不需要从根到叶的,但是要求是需要从上到下的节点,找出所有的路径使得节点的值的和等于目标值,返回路径的个数
核心思想
递归计数的技巧,不需要从根到叶的路径,只不过是将搜索的起点作为每一个起点即可,因此通过搞清楚子问题,很容易就可以将问题转化成给定起点,再递归找寻一条路径即可,利用两个递归嵌套我们可以将结果累加,第一个是起点的选择是一次递归的,还有从起点开始递归寻找路径个数又是一次
class Solution {
public:
int pathSum(TreeNode* root, int sum) {
if (!root) return 0;
// DFS在确定的起点开始搜索计数,pathSum 用来更换地点
return DFS(root, 0, sum)+pathSum(root->left, sum)+pathSum(root->right, sum);
}
private:
int DFS(TreeNode* root, int sum, int &target) {
if (!root) return 0;
int curSum=sum+root->val;
// 相等即为1,然后再搜索左子树以及右子树进行递归计数
return (curSum==target) + DFS(root->left, curSum, target) + DFS(root->right, curSum, target);
}
};收获
- 递归计数和递归分解问题的思想
#tree