题目描述:给定一个二叉树和一个值sum,请找出所有的根节点到叶子节点的节点值之和等于sum 的路径。
示例:
例如上图,sum=22,则要求的返回值为:[ [5,4,11,2], [5,8,9] ]
解题思路:利用先序遍历实现。当每遍历到一个节点时,将当前的结点数值加入到路径中。当遍历到根节点时,判断路径的和是否等于要求数值,相等则返回路径。
vector<vector<int>> pathSum(TreeNode* root, int sum) {
// write code here
vector<vector<int>> ans;
vector<int> line;
pre(root, ans, line,sum);
return ans;
}
//先序遍历
void pre(TreeNode *root,vector<vector<int>> &ans,vector<int> &line,int sum)
{
if(!root)
return;
line.push_back(root->val);
sum = sum - root->val;
if((sum == 0)&&(root->left==nullptr)&&(root->right==nullptr))
ans.push_back(line);
pre(root->left,ans,line,sum);
pre(root->right,ans,line,sum);
sum = sum + root->val;
line.pop_back();
}