求二叉树的先序遍历

来源:互联网 发布:自动打电话骚扰软件 编辑:程序博客网 时间:2024/05/17 02:34

求二叉树的先序遍历

Time Limit: 1000MS Memory limit: 65536K

题目描述

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

输入

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

输出

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

示例输入

2dbgeafcdgebfcalnixulinux

示例输出

abdegcfxnliu
下面是通俗的求法就是先建树。
#include <stdio.h>#include <string.h>#include <stdlib.h>#include <malloc.h>struct node{    char data;    struct node *l,*r;};struct node *creat(struct node *root,char *s,char *s1,int n){    if(n<=0) return NULL;    root=(struct node*)malloc(sizeof(struct node));    root->data=s1[n-1];    int p=strchr(s,s1[n-1])-s;    root->l=creat(root->l,s,s1,p);    root->r=creat(root->r,s+p+1,s1+p,n-p-1);    return root;};void xianxu(struct node *p){    if (p)    {        printf("%c",p->data);        xianxu(p->l);        xianxu(p->r);    }}int main(){    int len,n;    char str1[100],str2[100];    scanf("%d",&n);    while(n--)    {        struct node *head;        head = (struct node *)malloc(sizeof(struct node ));        scanf("%s %s",str1,str2);        len = strlen(str2);        head = creat(head,str1,str2,len);        xianxu(head);        printf("\n");    }    return 0;}

还有一个非主流的求法:
自己理解吧
#include <stdio.h>#include <string.h>#include <stdlib.h>#include <malloc.h>struct node{    char data;    struct node *l,*r;};char s[100];int t=0;struct node *creat(int len,char *str1,char *str2){    int k;    if(len<=0)        return NULL;    struct node *head;    head = (struct node *)malloc(sizeof(struct node));    head->data = *str1;    char *p;    for(p = str2;p!=NULL;p++)        if(*p==*str1)            break;    k = p-str2;    head->l = creat(k,str1+1,str2);    head->r = creat(len-k-1,str1+k+1,p+1);    return head;}void houxu(struct node *p){    if (p)    {        houxu(p->l);        houxu(p->r);        s[t++] = p->data;    }}int main(){    int i,len,n;    char str1[100],str2[100],str3[100],str4[100];    scanf("%d",&n);    while(n--)    {        struct node *head;        head = (struct node *)malloc(sizeof(struct node ));        scanf("%s %s",str1,str2);        len = strlen(str2);        for(i=0;i<len;i++)        {            str3[i] = str2[len-1-i];            str4[i] = str1[len-1-i];        }        head = creat(len,str3,str4);        t = 0;        houxu(head);        for(i=len-1;i>=0;i--)            printf("%c",s[i]);        printf("\n");    }    return 0;}


0 0
原创粉丝点击