一、题目:
输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。
注意:本题与主站 113 题路径总和 II相同。
二、思路&代码:
这道题其实是在问,从根节点开始到叶子结点的路径和有没有和所给的taget相等的?
在深度遍历中计算路径和和target相比一下即可。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
vector<vector<int>> pathSum(TreeNode* root, int target) {
vector<vector<int>>res;
vector<int>cur;
dfs(root,res,cur,target);
return res;
}
void dfs(TreeNode* root,vector<vector<int>>&res,vector<int>&cur,int target){
if(!root)return ;
cur.push_back(root->val);
target -= root->val;
if(target ==0 && !(root->left)&&!(root->right)){
res.push_back(cur);
}
dfs(root->left,res,cur,target);
dfs(root->right,res,cur,target);
cur.pop_back();
}
};
怕什么真理无穷,进一步有进一步的欢喜!