您的位置:首页 > 理论基础 > 数据结构算法

SDUT2137数据结构实验之求二叉树后序遍历和层次遍历

2016-07-22 22:21 281 查看
数据结构实验之求二叉树后序遍历和层次遍历Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^题目描述 已知一棵二叉树的前序遍历和中序遍历,求二叉树的后序遍历。输入 输入数据有多组,第一行是一个整数t (t<1000),代表有t组测试数据。每组包括两个长度小于50 的字符串,第一个字符串表示二叉树的先序遍历序列,第二个字符串表示二叉树的中序遍历序列。输出每组第一行输出二叉树的后序遍历序列,第二行输出二叉树的层次遍历序列示例输入2abdegcfdbgeafcxnliulnixu示例输出dgebfcaabcdefglinuxxnuli#include <stdio.h>#include <stdlib.h>#include <string.h>struct node{char ch;struct node *lc,*rc;};char s1[128],s2[128];int c=0,num=0;;struct node *creat(char *s1,char *s2,int len){struct node *root;char *x;int m;if(len<=0) return NULL;root=(struct node *)malloc(sizeof(struct node));root->ch=*s1;//先序第一个为根for(x=s2;x!=NULL;x++)//查找中序的根位置if(*x==*s1)break;m=x-s2;//左子树长度root->lc=creat(s1+1,s2,m);root->rc=creat(s1+m+1,x+1,len-m-1);//找右子树return root;}void lastPrintf(struct node *root){if(root){lastPrintf(root->lc);lastPrintf(root->rc);printf("%c",root->ch);}}void level(struct node *root){int a=0,b=0;int L=0;struct node *q[100];q[a++]=root;while(a>b){if(q[b]){printf("%c",q[b]->ch);if(q[b]->lc) q[a++]=q[b]->lc;if(q[b]->rc) q[a++]=q[b]->rc;}b++;}}int main(){int n,len;struct node *root;scanf("%d",&n);while(n--){scanf("%s%s",s1,s2);root=(struct node *)malloc(sizeof(struct node));len=strlen(s1);root=creat(s1,s2,len);//建树lastPrintf(root);//后序printf("\n");level(root);//层序printf("\n");}return 0;}
                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: