目录
问题重述:
题目:输入一颗二叉树的根节点和一个整数,打印出二叉树节点值得和为输入整数得所有路径。路径定义为从树得根节点开始往下一直到叶节点所经过得节点形成一条路径。
思路解析:
首先,注意一个雷区,题目要求一条路径是从根节点到叶节点,因此,满足条件得路径一定会包含一个叶节点。
由于要求是从根到叶节点得路径,因此可以想到利用二叉树的先序遍历,每往下遍历一步,就记录下路径,同时在叶子节点处判断是否满足条件,当从低往上回溯的时候,应该将路径序列中的最后一个元素舍弃。具体看下述代码。
代码实现:
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
vector<vector<int> > buffer;
vector<int> tmp;
vector<vector<int> > FindPath(TreeNode* root,int expectNumber) {
if(root==NULL)
return buffer;
tmp.push_back(root->val);//添加路径
//叶子节点判断
if((expectNumber-root->val)==0 && root->left==NULL && root->right==NULL)
{
buffer.push_back(tmp);
}
FindPath(root->left,expectNumber-root->val);
FindPath(root->right,expectNumber-root->val);
//舍弃最后一个节点
if(tmp.size()!=0)
tmp.pop_back();
return buffer;
}
};