思路:递归写法,用一个数组(python用链表)存储之前节点的值,然后对每个节点进行向前回溯。
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 getSum(self,root,sum,l,p):
if root==None:
return 0
n=0
temp=0
l[p]=root.val
j=p
while j>=0:
temp+=l[j]
if temp==sum:
n=n+1
j=j-1
n1=self.getSum(root.left,sum,l,p+1)
n2=self.getSum(root.right,sum,l,p+1)
return n+n1+n2
def pathSum(self, root: TreeNode, sum: int) -> int:
l=list(range(1000))
return self.getSum(root,sum,l,0)
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 getsum(TreeNode* root,int sum,vector<int>& ve,int p)
{
if(root==NULL)
return 0;
ve[p]=root->val;
int temp=0;
int n=0;
for(int i=p;i>=0;i--)
{
temp+=ve[i];
if(temp==sum)
n++;
}
int n1=getsum(root->left,sum,ve,p+1);
int n2=getsum(root->right,sum,ve,p+1);
return n+n1+n2;
}
int pathSum(TreeNode* root, int sum)
{
vector<int> ve(1000);
return getsum(root,sum,ve,0);
}
};