#include <bits/stdc++.h>
using namespace std;
const int maxn = 35;
int preOrder[maxn];
int preNum=0;
int postOrder[maxn];
int inOrder[maxn];
int InNum=0;
int n;
char oper[10];
stack<int> mock;
struct node
{
int data;
node* lchild;
node* rchild;
};
node* create(int preL,int preR,int inL,int inR)
{
if(preL > preR)
return NULL;
node* root = new node;
root->data = preOrder[preL]; //根-左-右
int k;
for(k=inL;k<=inR;k++)
{
//左-根-右
if(inOrder[k] == preOrder[preL])
break;
}
int leftNum = k-inL;
root->lchild = create(preL+1,preL+leftNum,inL,k-1);
root->rchild = create(preL+leftNum+1,preR,k+1,inR);
return root;
}
int PrintNum=0;
void Printpost(node* root)
{
if(root == NULL)
return;
Printpost(root->lchild);
Printpost(root->rchild);
printf("%d",root->data);
PrintNum++;
if(PrintNum<n)
printf(" ");
}
int main()
{
scanf("%d",&n);
while(scanf("%s",oper) != EOF)
{
if(strcmp(oper,"Push") == 0)
{
int temp;
scanf("%d",&temp);
mock.push(temp);
preOrder[preNum++] = temp;
}
else if(strcmp(oper,"Pop") == 0)
{
if(!mock.empty())
{
int temp = mock.top();
inOrder[InNum++] = temp;
mock.pop();
}
}
}
//知道了前序和中序,需要推导出后序
node* root = create(0,n-1,0,n-1);
Printpost(root);
return 0;
}
A1086 Tree Traversals Again (25 分)
最新推荐文章于 2021-07-16 10:44:18 发布