版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/N1neDing/article/details/83039698
题目描述:
输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
解题思路:
DFS,注意:参数如果为引用,则为按地址传递,则递归里的操作会改变其值;如果不为引种,则为按值传递,当递归里的函数执行完之后,参数值仍未改变。
参考源码:
class Solution {
public:
vector<int> vec;
vector<vector<int>> res;
vector<vector<int> > FindPath(TreeNode* root,int expectNumber) {
FindPathHelper(root,vec,0,expectNumber);
return res;
}
void FindPathHelper(TreeNode* node,vector<int> vec,int number,int expectnumber)
{
if(node == NULL) return;
number += node->val;
if(number > expectnumber)
{
return;
}
else if(number == expectnumber && node->left == NULL && node->right == NULL)
{
vec.push_back(node->val);
res.push_back(vec);
return;
}
else if(number < expectnumber)
{
vec.push_back(node->val);
FindPathHelper(node->left,vec,number,expectnumber);
FindPathHelper(node->right,vec,number,expectnumber);
}
else if(number == expectnumber && (node->left != NULL || node->right != NULL))
{
return;
}
}
};