#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);
}
else
printf("%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;
}
PAT1086(二叉树)
最新推荐文章于 2021-01-15 11:33:20 发布