给定一个二叉树,它的每个结点都存放着一个整数值。
找出路径和等于给定数值的路径总数。
路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。
二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数。
示例:
root = [10,5,-3,3,2,null,11,3,-2,null,1], sum = 8

返回 3。和等于 8 的路径有:
- 5 -> 3
- 5 -> 2 -> 1
- -3 -> 11
不需要求实际的路径,只需要求路径数量
用双递归解决,双递归是哪个双呢,首先有pathSum函数和path函数
pathSum函数用于由某个根为开头计算路径,递归计算每个节点
path函数则是确定某个根,对其进行递归,找出累加路径值等于sum,若当前根等于sum值则加1然后继续递归,(进行下次递归时减去当前节点的值sum-=root->val),否则直接递归
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
int path(struct TreeNode* root , int sum){
if(!root) return 0;
int cnt=0 ;
if(root->val == sum){
cnt+=1;
}
cnt+=path(root->left,sum-root->val)+path(root->right,sum-root->val);
return cnt;
}
int pathSum(struct TreeNode* root, int sum){
//只要求路径的数量,路径由上到下,满足sum即可 递归?
if(!root) return 0;
//pathSum 函数计数从0开始
//path 函数计数层层向下 sum-=root->val
return path(root,sum)+pathSum(root->left,sum)+pathSum(root->right,sum);
}
本文探讨了在二叉树中寻找路径和等于特定数值的所有路径数量的算法。通过使用双递归方法,即pathSum函数和path函数,有效地解决了问题。文章详细解释了算法的实现过程,并提供了具体的代码示例。
545

被折叠的 条评论
为什么被折叠?



