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] ]
Subscribe to see which companies asked this question
class Solution {
public:
vector<vector<int>> pathSum(TreeNode* root, int sum) {
vector<vector<int>> res;
vector<int> tmp; //保存中间结果
tmpFunction(root, sum, tmp, res);
return res;
}
void tmpFunction(TreeNode* root, int sum, vector<int> &tmp, vector<vector<int>>&res){
if (root == NULL) return;
tmp.push_back(root->val);
if (root->left == NULL && root->right == NULL){
if (root->val == sum)
res.push_back(tmp);
}
tmpFunction(root->left, sum - root->val, tmp, res);
tmpFunction(root->right, sum - root->val, tmp, res);
tmp.pop_back();
}
};
#include<iostream>
#include<new>
#include<vector>
using namespace std;
//Definition for binary tree
struct TreeNode
{
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
class Solution
{
public:
vector<vector<int> > pathSum(TreeNode *root, int sum)
{
vector<vector<int> > path;
vector<int> tmp;
hasPathSum(root, sum, path, tmp);
return path;
}
void hasPathSum(TreeNode *root, int sum, vector<vector<int> > &path, vector<int> tmp)
{
if (root == NULL)
return;
tmp.push_back(root->val);
if (root->left == NULL&&root->right == NULL && (sum - root->val) == 0)
{
path.push_back(tmp);
}
if (root->left)
hasPathSum(root->left, sum - root->val, path, tmp);
if (root->right)
hasPathSum(root->right, sum - root->val, path, tmp);
tmp.pop_back();
}
void createTree(TreeNode *&root)
{
int i;
cin >> i;
if (i != 0)
{
root = new TreeNode(i);
if (root == NULL)
return;
createTree(root->left);
createTree(root->right);
}
}
};
int main()
{
Solution s;
TreeNode *root;
s.createTree(root);
vector<vector<int> > path = s.pathSum(root, 22);
for (auto a : path)
{
for (auto v : a)
cout << v << " ";
cout << endl;
}
system("pause");
return 0;
}