您的位置:首页 > 其它

Path Sum II - LeetCode 113

2015-06-20 11:30 381 查看
题目描述:

Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given sum.

For example:

Given the below binary tree and sum = 22,

5

/ \

4 8

/ / \

11 13 4

/ \ / \

7 2 5 1

return

[

[5,4,11,2],

[5,8,4,5]

]

Hide Tags Tree Depth-first Search

分析:

思路和Path Sum一样,递归去计算和为sum的路径,但是此题需要记录路径上面的元素,因此需要回溯。

以下是C++实现:

/**////////////////////////////16ms///*/
/**
* Definition for binary tree
* struct TreeNode {
*     int val;
*     TreeNode *left;
*     TreeNode *right;
*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
void getSumPath(vector<vector<int>> &res,vector<int> &path, int target,int sum,TreeNode *root){
//sum是当前路径该节点之前的元素的和;target是题目要求的目标和
if(root == NULL)
return;
sum += root->val;
path.push_back(root->val);
if(sum == target && root->left == NULL && root->right == NULL){
//到叶子节点,且路径和等于目标值,则添加一条路径到结果集中
res.push_back(path);
}
getSumPath(res,path,target,sum,root->left); //递归处理左右子树
getSumPath(res,path,target,sum,root->right);

path.pop_back();//遍历完一条路径后要回溯
sum-=root->val; //
return;
}
vector<vector<int> > pathSum(TreeNode *root, int target) {
vector<vector<int>> res;
if(root == NULL)
return res;
vector<int>path;
int sum = 0;
getSumPath(res,path,target,sum,root);
return res;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: