// ConsoleApplication2.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "stdafx.h"
#include<iostream>
#include<vector>
#include<algorithm>
#include<numeric>
#include<list>
#include<iterator>
#include<queue>
#include<stack>
#include<algorithm>
using namespace std;
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
class Solution {
public:
int sum = 0;
vector<int> path;
vector <vector<int>> paths;
int flag = 0;
vector<vector<int> > FindPath(TreeNode* root, int expectNumber) {
paths = {};
if (root != NULL)
{
FindOnePath(root, expectNumber);
}
///*if (root != NULL) FindOnePath(root, expectNumber);
//
//else paths = {};*/
//
return paths;
}
void FindOnePath(TreeNode* &root, int expectNumber) {
if (root == NULL)
{
if(flag==0)
{
sum = 0;
for (auto it = path.begin(); it != path.end(); ++it)
sum += *it;
if (sum == expectNumber)
{
paths.push_back(path);
}
flag = 1;
}
else
{
flag = 0;
}
return;
}
else
{
path.push_back(root->val);
cout << "push:"<<root->val<<endl;
FindOnePath(root->left, expectNumber); //第二次犯这个错误了,记住这里调用的是FindOnePath,而不是FindPath
FindOnePath(root->right, expectNumber);
path.pop_back();
cout << "pop :" << root->val << endl;
}
}
void CreateBiTree(TreeNode* &T) //这里的引用 & 必须,要不然会报未初始化变量
{
int num = 0;
cin >> num;
if (num == 0) return;
else
{
T = new TreeNode(num);
CreateBiTree(T->left);
CreateBiTree(T->right);
}
}
};
int main()
{
Solution so;
TreeNode *T;
so.CreateBiTree(T);
cout << "创建二叉树成功!"<<endl;
vector<vector<int>> vec;
vec = so.FindPath(T,1);
for (auto it = vec.begin(); it != vec.end(); it++)
{
for (auto i = (*it).begin(); i != (*it).end(); i++)
cout << *i << " ";
cout << endl;
}
return 0;
}