题目:输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
/*
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> > FindPath(TreeNode* root,int expectNumber) {
//周六 2017-6-24-------如何做。
//首先需要访问根节点,
vector<vector<int> > res;
//stack<int> m_res;
vector<int> tmp;
if(root==NULL) return res;
//访问根节点。
//前序遍历
//访问根节点
int currentSum=0;
findAllPath(root,expectNumber,res,tmp,currentSum);
return res;
}
void findAllPath(TreeNode *root,int expectNumber,vector<vector<int> >&res,vector<int> &tmp,int currentNumber)
{
//计算he
currentNumber+=root->val;
tmp.push_back(root->val);
bool flag=(!root->right)&&(!root->left);
if(flag&&(currentNumber==expectNumber))
{
res.push_back(tmp);
}
//if (flag)
// {//不同则删pop_back()
// tmp.erase(tmp.end()-1);
//}
if(root->left)
findAllPath(root->left,expectNumber,res,tmp,currentNumber);
if(root->right)
findAllPath(root->right,expectNumber,res,tmp,currentNumber);
tmp.erase(tmp.end()-1);
}
//需不需要一个函数来判断路径和
};