Leetcode437. 路径总和 III(C语言)
数据结构-树:算法与数据结构参考
题目:
给定一个二叉树,找出路径和等于给定数值的路径总数。路径不需要从根节点开始,也不需要在叶子节点结束,路径方向必须向下。二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数。例:
输入:[10,5,-3,3,2,null,11,3,-2,null,1] 8
输出:3
思路:
两次递归,注意根节点另外处理
代码:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
int rpathSum(struct TreeNode* root, int sum){
//包括根节点在内的路径总和
if(!root) return 0;
int r=0;
if(root->val==sum) r++;
r=r+rpathSum(root->left,sum-root->val)+rpathSum(root->right,sum-root->val);
//其中一个数为root,为了下一次的递归需要减去root值
return r;
}
int pathSum(struct TreeNode* root, int sum){
if(!root) return 0;
int total=rpathSum(root,sum)+pathSum(root->left,sum)+pathSum(root->right,sum);
return total;
}