您的位置:首页 > 其它

输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。

2016-10-24 13:47 351 查看
// 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐