寒假训练营第十天(基础数据结构2):A题

A - 前序遍历、中序遍历建树 UVA - 10701

寒假训练营第十天(基础数据结构2):A题

题意:首先不得不说不说我现在还是一脸懵逼,这几天感觉是看天书一样,即涉及算法还有好难的数据结构。
这道题主要就是通过前序以及中序建树,然后通过后序访问。代码如下:

#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;
}

小白几乎要崩溃了