首页 > 代码库 > 数据结构实验之求二叉树后序遍历和层次遍历
数据结构实验之求二叉树后序遍历和层次遍历
数据结构实验之求二叉树后序遍历和层次遍历
Time Limit: 1000MS Memory limit: 65536K
题目描述
已知一棵二叉树的前序遍历和中序遍历,求二叉树的后序遍历。
输入
输入数据有多组,第一行是一个整数t (t<1000),代表有t组测试数据。每组包括两个长度小于50 的字符串,第一个字符串表示二叉树的先序遍历序列,第二个字符串表示二叉树的中序遍历序列。
输出
每组第一行输出二叉树的后序遍历序列,第二行输出二叉树的层次遍历序列
示例输入
2abdegcfdbgeafcxnliulnixu
示例输出
dgebfcaabcdefglinuxxnuli
借鉴的代码:
#include<stdio.h>#include<stdlib.h>#include<string.h>typedef struct tree{ char data; struct tree *l,*r;}BinTree;BinTree *creat(char *pre, char *in, int len){ int k; if(len<=0) return NULL; BinTree *head; head=(BinTree*)malloc(sizeof(BinTree)); head->data=http://www.mamicode.com/*pre; char *p; for(p=in;p!=NULL;p++) if(*p==*pre) break;// 在中序遍历的序列中得到与先序相同的节点 k=p-in; head->l=creat(pre+1,in,k);//递归得到左子树 head->r=creat(pre+k+1,p+1,len-k-1);//得到右子树 return head;}void postorder(BinTree *t){ if(t) { postorder(t->l); postorder(t->r); printf("%c",t->data); }}void lorder(BinTree *t){ int front=0,rear=1; BinTree *q[100]; q[0]=t; while(front<rear) { if(q[front]) { printf("%c",q[front]->data); q[rear++]=q[front]->l; q[rear++]=q[front]->r; front++; } else front++; }}int main(){ int t,len; char pre[101],in[101]; BinTree *root; root = (BinTree *)malloc(sizeof(BinTree)); scanf("%d",&t); getchar(); while(t--) { scanf("%s %s",pre,in); len = strlen(pre); root = creat(pre,in,len); postorder(root); printf("\n"); lorder(root); printf("\n"); } return 0;}
数据结构实验之求二叉树后序遍历和层次遍历
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。