#include<bits/stdc++.h>
using namespace std;
struct tree
{
char ch;
struct tree *lc,*rc;
};
struct tree * preincreat(char *pre,char *in,int len)
{
struct tree *node;
if(len<=0)
return NULL;
node=(struct tree *)malloc(sizeof(struct tree));
node->ch=*pre;
char *t;
for(t=in;t;t++)
if(*t==*pre)
break;
int lt=t-in;
node->lc=preincreat(pre+1,in,lt);
node->rc=preincreat(pre+lt+1,t+1,len-lt-1);
return node;
};
void last(struct tree *t)
{
if(t)
{
last(t->lc);
last(t->rc);
printf("%c",t->ch);
}
}
void lev(struct tree *node)
{
queue<struct tree*>Q;
Q.push(node);
while(!Q.empty())
{
struct tree *t;
t=Q.front();
if(t)
{
Q.push(t->lc);
Q.push(t->rc);
printf("%c",t->ch);
}
Q.pop();
}
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
char pre[55],in[55];
scanf("%s%s",pre,in);
struct tree *root;
root=preincreat(pre,in,strlen(pre));
last(root);
printf("\n");
lev(root);
printf("\n");
}
}
SDUT2137数据结构实验之求二叉树后序遍历和层次遍历
最新推荐文章于 2021-06-25 19:14:25 发布