链接
思路
不会做。没思路。
看别人的代码,看了好久才看懂orz。其实也不难啊,为啥看了那么久啊。以后要提高看代码的能力。动手推演一遍也是个不错的选择。
其实就是暴力。递归法,遍历每一条路径,看其是否是答案。
其中,递归确定每一条路径的起点。这里需要注意的是,找到一个路径后不用立刻返回,只要继续就好,一直走到叶子为止。中间只要满足条件即result+=1
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 result = 0;//总共有多少解
int pathSum(TreeNode* root, int sum) {
if(root == NULL)
{
return 0;
}
//确定起点
pathsolve(root, sum);//解决
return result;
}
void pathsolve(TreeNode* root, int sum){
if(root == NULL){
return ;
}
solve(root, sum);//解决问题
pathsolve(root->left, sum);
pathsolve(root->right, sum);
}
//递归求解有多少条路径
void solve(TreeNode* root, int sum){
if(root == NULL)
{
return ;
}
if(root->val == sum){
result += 1;
//满足条件即result+=1
}
sum -= root->val;//目标变了
solve(root->left,sum);//左子树
solve(root->right,sum);//右子树
}
};
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 solve(self, root: TreeNode, target):
if root:
return int(root.val == target) + self.solve(root.left, target -root.val) + self.solve(root.right, target - root.val)
return 0
def pathSum(self, root: TreeNode, sum: int) -> int:
if root:
return self.solve(root,sum) + self.pathSum(root.left,sum) + self.pathSum(root.right,sum)
return 0