为什么数字可以是重复的。。。
我用的二维数组来构建树。下标及对应节点的左右指针。
结果可以是重复的。我改都没办法改。。
#include<stdio.h>
#include<math.h>
#include<algorithm>
#include<stdlib.h>
#include<iostream>
#include<string.h>
#include<queue>
using namespace std;
int tree[33][2];
int zz=0;
int n;
int num=0;
void post(int n)
{
if(n==0)
return;
if(tree[n][0]==0&&tree[n][1]==0)
{
if(num==n-1)
printf("%d",n);
else
printf("%d ",n);
}
else
{
post(tree[n][0]);
post(tree[n][1]);
printf("%d ",n);
num++;
}
}
int main()
{
int push[33];
int pop[33];
char input[8];
int tmp;
int i,j,k,flag1,flag2;
for(i=0;i<33;i++)
{tree[i][0]=0;
tree[i][1]=0;}
scanf("%d",&n);
flag1=-1;
flag2=-1;
bool lol=true;
for(i=0;i<2*n;i++)
{
scanf("%s",input);
if(input[1]=='u')
{
scanf("%d",&tmp);
push[++flag1]=tmp;
if(lol)
{
if(flag1==0)
continue;
else
{
tree[push[--flag1]][0]=tmp;
flag1++;
}
}
else
{
tree[pop[flag2]][1]=tmp;
lol=true;
}
}
else
{
pop[++flag2]=push[flag1];
push[flag1]=0;
flag1-=1;
lol=false;
}
}
int li[n];
memset(li,0,sizeof(li));
for(i=0;i<n;i++)
{
li[tree[i][0]]=1;
li[tree[i][1]]=1;
}
for(i=0;i<n;i++)
if(li[i]==0)
{
k=i;
break;
}
post(k);
return 0;
}