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;}
相关文章推荐
- 数据结构-----------B树
- 数据结构与算法 1 :基本概念,线性表顺序结构,线性表链式结构,单向循环链表
- SDUT2136数据结构实验之二叉树的建立与遍历
- 单链表
- 树状数组 ( 基础篇 )——敌兵布阵 ( HDU 1166 )
- SDUT2118数据结构实验之链表三:链表的逆置
- AVL树的插入与删除操作
- 数据结构-串操作应用之词索引表
- 每次弹出一个栈的最小元素
- 计算几何中的精确度
- 数据结构实验之二叉树二:遍历二叉树
- 数据结构和算法系列17 图
- PQ树小结
- 数据结构与算法JavaScript - 列表
- 数据结构和算法关系
- 1.17 k阶斐波那契序列的第m项值的函数算法
- SDUT 3343 数据结构实验之二叉树四:还原二叉树
- C++学习之路(3) 常用数据结构与STL
- SDUT 2137 数据结构实验之求二叉树后序遍历和层次遍历
- 【算法和数据结构】平衡查找树之B树