C - 求二叉树的先序遍历(中序后序求先序)

Description

已知一棵二叉树的中序遍历和后序遍历,求二叉树的先序遍历
Input

输入数据有多组,第一行是一个整数t (t<1000),代表有t组测试数据。每组包括两个长度小于50 的字符串,第一个字符串表示二叉树的中序遍历序列,第二个字符串表示二叉树的后序遍历序列。
Output

输出二叉树的先序遍历序列
Sample

Input

2
dbgeafc
dgebfca
lnixu
linux
Output

abdegcf
xnliu

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include<malloc.h>
typedef struct node
{
    struct node *l,*r;
    char data;
} node,*Tree;
char hou[111100],zhong[111100];
struct node* Creat(char zhong[],char hou[],int n)
{
    Tree T;
    if(n==0)
        return NULL;
    char *p;
    int k;
    T = (struct node*)malloc(sizeof(node));
    T->data = hou[n-1];
    for(int i=0;i<n;i++)
    {
        if(zhong[i] == hou[n-1])
        {
            k = i;
            break;
        }
    }
    //k = p-zhong;
    T->l = Creat(zhong,hou,k);
    T->r = Creat(zhong+k+1,hou+k,n-k-1);
    return T;
}

void xianxu(Tree&T)
{
    if(T)
    {
        printf("%c",T->data);
        xianxu(T->l);
        xianxu(T->r);
    }
}
int main()
{
    int t;
    Tree T;
    scanf("%d",&t);
    getchar();
    while(t--)
    {
        scanf("%s %s",zhong,hou);
        int n = strlen(zhong);
        T = Creat(zhong,hou,n);
        xianxu(T);
        printf("\n");
    }
    return 0;
}

上一篇:12. 矩阵中的路径


下一篇:浏览器工作原理学习(二十一)