寒假训练营第十天(基础数据结构2):A题
A - 前序遍历、中序遍历建树 UVA - 10701
题意:首先不得不说不说我现在还是一脸懵逼,这几天感觉是看天书一样,即涉及算法还有好难的数据结构。
这道题主要就是通过前序以及中序建树,然后通过后序访问。代码如下:
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<queue>
using namespace std;
struct Tree
{
Tree *lchild;
Tree *rchild;
char data;
};
char pre[55],in[55];
Tree *root;
void PostTraverse(Tree *T)
{
if(T)
{
PostTraverse(T->lchild);
PostTraverse(T->rchild);
if(T==root)
{
printf("%c\n",T->data);
}
else
printf("%c",T->data);
}
}
Tree *BuildTree(char *pre,char *in,int size)
{
Tree *T;
for(int i=0;i<size;i++)
{
if(pre[0]==in[i])
{
T=new Tree();
T->data=in[i];
T->lchild=BuildTree(pre+1,in,i);
T->rchild=BuildTree(pre+i+1,in+i+1,size-(i+1));
return T;
}
}
return NULL;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n;
scanf("%d",&n);
scanf("%s%s",pre,in);
root=BuildTree(pre,in,n);
PostTraverse(root);
}
return 0;
}
小白几乎要崩溃了