PAT1086(二叉树)

来源:互联网 发布:桌面文件夹归类软件 编辑:程序博客网 时间:2024/05/21 06:03
#include<stdio.h>#include<stack>using namespace std;int pre[31];int in[31];int n;char str[10];int index1=0;int index2=0;int x;stack<int>s;struct node{int data;node *left;node *right;};node* creat(int prel,int prer,int inl,int inr){if(prel>prer)return NULL;node *root=new node;root->data=pre[prel];int k;for(k=inl;;k++)if(in[k]==pre[prel])break;int numl=k-inl;root->left=creat(prel+1,prel+numl,inl,k-1);root->right=creat(prel+numl+1,prer,k+1,inr);return root;}void postorder(node *root,int &index){if(root==NULL)return ;postorder(root->left,index);postorder(root->right,index);if(index<n){index++;printf("%d ",root->data);}elseprintf("%d\n",root->data);}int main(){//freopen("in.txt","r",stdin);scanf("%d",&n);for(int i=0;i<2*n;i++){scanf("%s",str);if(str[1]=='u'){scanf("%d",&x);s.push(x);pre[index1++]=x;//按输入顺序得到先序遍历}else {x=s.top();s.pop();in[index2++]=x;//模拟栈得到中序遍历序列}}node *root=creat(0,n-1,0,n-1);int index=1;postorder(root,index);return 0;}

0 0
原创粉丝点击