数据结构实验之求二叉树后序遍历和层次遍历
数据结构实验之求二叉树后序遍历和层次遍历
Time Limit: 1000MS Memory limit: 65536K
题目描述
已知一棵二叉树的前序遍历和中序遍历,求二叉树的后序遍历。
输入
输入数据有多组,第一行是一个整数t (t<1000),代表有t组测试数据。每组包括两个长度小于50 的字符串,第一个字符串表示二叉树的先序遍历序列,第二个字符串表示二叉树的中序遍历序列。
输出
每组第一行输出二叉树的后序遍历序列,第二行输出二叉树的层次遍历序列
示例输入
2 abdegcf dbgeafc xnliu lnixu
示例输出
dgebfca abcdefg linux xnuli
借鉴的代码:
#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=*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; }
每天训练发现我比别人做的好慢,但是理解的更深刻,如果一开始学一个新知识点就搜模板,那么这样的人是走不远的,毕业之后带走的只有思维,什么荣誉,奖杯都已经不重要了。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步