#include<iostream>
using namespace std;
#define MAXM 10
#define MAXN 100
#include<malloc.h>
typedef struct node{
int lev;
char data;
struct node *child[MAXM];
struct node *parent;
}NODE;
typedef struct dnode{
int lev;
char data;
}DNODE;
DNODE a[MAXN];
int m,n;
NODE*lev_tree(DNODE a[],int m,int n)
{
int i,j;
NODE *root,*p,*q;
if(n<1)return (NULL);
root=(NODE*)malloc(sizeof(NODE));
root->lev=a[0].lev;
root->data=a[0].data;
for(i=0;i<m;i++)
root->child[i]=NULL;
root->parent=NULL;
p=root;
for(i=1;i<n;i++)
{
q=(NODE*)malloc(sizeof(NODE));
q->lev=a[i].lev;
q->data=a[i].data;
for(j=0;j<m;j++)
q->child[j]=NULL;
while(q->lev<=p->lev)
p=p->parent;
q->parent=p;
j=-1;
while(p->child[++j]!=NULL);
p->child[j]=q;
p=q;
}
return (root);
}
void pre_order(NODE *t,int n)
{
int i;
if(t!=NULL)
{
cout<<t->data<<endl;
for(i=0;i<n;i++)
pre_order(t->child[i],m);
}
}
void m_order(NODE *t,int m)
{
int i;
if(t!=NULL)
{
for(i=0;i<m;i++)
m_order(t->child[i],m);
cout<<t->data<<endl;
}
}
int main()
{
int i,j;
char k;
n=0;
for(i=0;i<MAXN;i++)
{
cout<<"please enter "<<endl;
cin>>j>>k;
if(j==-1&&k=='q') break;
a[i].data=k;
a[i].lev=j;
n++;
}
m=3;
NODE*head=lev_tree(a,m,n);
cout<<"前序遍历 ";
pre_order(head,m);
cout<<"后序遍历;";
m_order(head,m);
return 0;
}