给定一个二叉树,找出所有路径中各节点相加总和等于给定 目标值 的路径。
一个有效的路径,指的是从根节点到叶节点的路径。
样例
样例1:
输入:
{1,2,4,2,3}
5
输出: [[1, 2, 2],[1, 4]]
说明:
这棵树如下图所示:
1
/ \
2 4
/ \
2 3
对于目标总和为5,很显然1 + 2 + 2 = 1 + 4 = 5
样例2:
输入:
{1,2,4,2,3}
3
输出: []
说明:
这棵树如下图所示:
1
/ \
2 4
/ \
2 3
注意到题目要求我们寻找从根节点到叶子节点的路径。
1 + 2 + 2 = 5, 1 + 2 + 3 = 6, 1 + 4 = 5
这里没有合法的路径满足和等于3.
/**
* Definition of TreeNode:
* class TreeNode {
* public:
* int val;
* TreeNode *left, *right;
* TreeNode(int val) {
* this->val = val;
* this->left = this->right = NULL;
* }
* }
*/
class Solution {
public:
/*
* @param root: the root of binary tree
* @param target: An integer
* @return: all valid paths
*/
vector<vector<int>> binaryTreePathSum(TreeNode * root, int target) {
// write your code here
vector<vector<int>>res;
if(root==NULL) return res;
vector<int>tmp;
recursion(res,tmp,root,target);
return res;
}
void recursion(vector<vector<int>>&res,vector<int>&tmp,TreeNode * root, int target)
{
tmp.push_back(root->val);
if(root->left==NULL&&root->right==NULL&&target-root->val==0)
{
res.push_back(tmp);
}
else if(root!=NULL)
{
if(root->left)
{
recursion(res,tmp,root->left,target-root->val);
tmp.pop_back();
}
if(root->right)
{
recursion(res,tmp,root->right,target-root->val);
tmp.pop_back();
}
}
}
};