PAT--1020. Tree Traversals

来源:互联网 发布:知乎问题数量 编辑:程序博客网 时间:2024/06/06 02:41

pat 1020

题解

后序中序遍历建树,再层序遍历。

#include <iostream>#include <cstdio>#include <queue>#include <algorithm>using namespace std;struct node{    int val;    node* left;    node* right;    node(int v):val(v), left(NULL), right(NULL){}};int inorder[35], postorder[35];node* build(int* in, int* post, int n){    if(n == 0) return NULL;    node* root = new node(post[n - 1]);    int p = 0;    while(in[p] != post[n - 1]) p++;    root->left  = build(in, post, p);    root->right = build(in + p + 1, post + p, n - p - 1);    return root;}void level(node* root, int n){    queue<node*> Q;    Q.push(root);    while(!Q.empty()){        node* p = Q.front(); Q.pop();        cout << p->val;        if(--n) cout << " ";        if(p->left)  Q.push(p->left);        if(p->right) Q.push(p->right);    }}int main(){    int n;    cin >> n;    for(int i = 0; i < n; ++i) cin >> postorder[i];    for(int i = 0; i < n; ++i) cin >> inorder[i];    node* root = build(inorder, postorder, n);    level(root, n);    return 0;}
0 0