输入一棵二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。
从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
样例
给出二叉树如下所示,并给出num=22。
5
/ \
4 6
/ / \
12 13 6
/ \ / \
9 1 5 1
输出:[[5,4,12,1],[5,6,6,5]]
算法:dfs,树的遍历
C++代码:
class Solution {
public:
vector<vector<int>> res;
vector<int> path;
vector<vector<int>> findPath(TreeNode* root, int sum) {
dfs(root,0,sum);
return res;
}
void dfs(TreeNode* root, int sum,int traget){
if(!root) return;
sum += root->val;
path.push_back(root->val);
if(!root->left && !root->right && sum == traget) res.push_back(path);
else{
dfs(root->left,sum,traget);
dfs(root->right,sum,traget);
}
path.pop_back();
}
};