您的位置:首页 > 其它

1020. Tree Traversals (25)

2016-03-02 20:57 471 查看


1020. Tree Traversals (25)

#include <iostream>
#include <stdio.h>
#include <vector>
#include <cmath>
#include <stack>
#include <queue>
#include <deque>
#include <algorithm>
#include <map>
using namespace std;

struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
TreeNode *create(vector<int> pre,vector<int> in,int first,int last,int &curRoot){
if (first>last){
curRoot++;
return NULL;
}
TreeNode *p = new TreeNode(pre[curRoot]);
auto it = find(in.begin()+first,in.begin()+last+1,pre[curRoot]);
int pos = (int)(it- in.begin());
p->right =create(pre, in, pos+1, last, --curRoot);
p->left = create(pre, in, first,pos-1, --curRoot);
return p;
}
int main(){
int n;
scanf("%d",&n);
vector<int>post(n),in(n);
for (int i=0; i<n;++i)
scanf("%d",&post[i]);
for (int i=0; i<n;++i)
scanf("%d",&in[i]);
int cur = n-1;
TreeNode * p = create(post, in, 0, (int)in.size()-1, cur);
vector<int>ans;
queue<TreeNode *>q;
if(p)
q.push(p);
while (!q.empty()) {
p = q.front();
q.pop();
ans.push_back(p->val);
if(p->left)
q.push(p->left);
if(p->right)
q.push(p->right);
}
for (int i=0; i<n; ++i)
printf(i==n-1?"%d\n":"%d ",ans[i]);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: