PAT 1020. Tree Traversals(25)

来源:互联网 发布:战神诀光翼进阶数据 编辑:程序博客网 时间:2024/06/04 20:02
//这是第二次写的版本
#include<iostream>using namespace std;#define MAX 35int post_list[MAX],in_list[MAX];int n;class Node{    public:    int data;Node* left,*right;    Node(int data)    {        this->data=data;        this->left=NULL;        this->right=NULL;    }};Node* create_post_in(int post_start,int in_start,int n){    Node* p=NULL;    if(n>0)    {            int elem=post_list[post_start+n-1];            p=new Node(elem);            int i;            for(i=0;i<n;i++)            {                if(elem==in_list[in_start+i])   break;            }            p->left=create_post_in(post_start,in_start,i);            p->right=create_post_in(post_start+i,in_start+i+1,n-i-1);    }    return p;//如果n为0的话直接返回NULL了,n大于0的情况下才有创建新节点的必要}#include<queue>bool first=true;void level_order(Node* root){    queue<Node*> que;    que.push(root);    while(!que.empty())    {        Node *tmp=que.front();        if(tmp->left!=NULL)        que.push(tmp->left);        if(tmp->right!=NULL)        que.push(tmp->right);        if(first)        {            first=false;            cout<<tmp->data;        }        else        {            cout<<" "<<tmp->data;        }        que.pop();    }}int main(){    cin>>n;    for(int i=1;i<=n;i++)    {        cin>>post_list[i];    }    for(int i=1;i<=n;i++)    {        cin>>in_list[i];    }    Node* root=create_post_in(1,1,n);    level_order(root);}
0 0