题目描述: 给定一个二叉树,它的每个结点都存放着一个整数值。
找出路径和等于给定数值的路径总数。
路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。
二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数。
示例:
root = [10,5,-3,3,2,null,11,3,-2,null,1], sum = 8
10 / \ 5 -3/ \ 3 2 11 / \ 3 -2 1
返回 3。和等于 8 的路径有:
5 -> 35 -> 2 -> 1-3 -> 11思路: 双重递归,外层递归包括里层递归
代码如下: C++:
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: int res=0; void dfs(TreeNode* point,int sum){ if(!point) return; if(sum-point->val==0) res++; dfs(point->left,sum-point->val); dfs(point->right,sum-point->val); } int pathSum(TreeNode* root, int sum) { if(!root) return 0; dfs(root,sum); pathSum(root->left,sum); pathSum(root->right,sum); return res; } };python:
# Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: def pathSum(self, root: TreeNode, sum: int) -> int: self.res=0 def dfs1(root,sum): if not root: return sum-=root.val if sum==0: self.res+=1 dfs1(root.left,sum) dfs1(root.right,sum) def dfs2(root,sum): if not root:return dfs1(root,sum) dfs2(root.left,sum) dfs2(root.right,sum) dfs2(root,sum) return self.res