题目描述
输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
思路
采用递归,唯一的问题是怎么返回结果。如何保存当前路径。
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
vector<int> temp; //保存当前路径
vector<vector<int>> ans; //保存最终结果
public:
vector<vector<int> > FindPath(TreeNode* root,int expectNumber) {
if(root) //空树直接返回
IsPath(root, expectNumber);
return ans;
}
void IsPath(TreeNode* root, int exp)
{
temp.push_back(root->val); //压入当前节点
if(root->val == exp && !(root->left) && !(root->left)) //当前节点为根结点,且数值相同,为结果之一。
ans.push_back(temp);
if(root->val < exp && root->left) //左右子树递归调用,<可以简化操作
IsPath(root->left, exp-root->val);
if(root->val < exp && root->right)
IsPath(root->right, exp-root->val);
temp.pop_back(); //遍历完左右子树后,弹出当前结点。。。很重要!!!
}
};