sdut 2137 数据结构实验之求二叉树后序遍历和层次遍历
来源:互联网 发布:犹大福音 知乎 编辑:程序博客网 时间:2024/06/01 22:19
数据结构实验之求二叉树后序遍历和层次遍历
Time Limit: 1000MS Memory Limit: 65536KB
Submit Statistic Discuss
Problem Description
已知一棵二叉树的前序遍历和中序遍历,求二叉树的后序遍历和层序遍历。
Input
输入数据有多组,第一行是一个整数t (t<1000),代表有t组测试数据。每组包括两个长度小于50 的字符串,第一个字符串表示二叉树的先序遍历序列,第二个字符串表示二叉树的中序遍历序列。
Output
每组第一行输出二叉树的后序遍历序列,第二行输出二叉树的层次遍历序列。
Example Input
2abdegcfdbgeafcxnliulnixu
Example Output
dgebfcaabcdefglinuxxnuli
Hint
Author
#include <iostream>#include <string.h>#include <queue>#include <stack>#include <malloc.h>using namespace std;char pre[51],in[51];typedef struct btree{ char date; btree *lchild,*rchild;}btree;btree *root;btree *createbtree(char pre[],char in[],int n){ btree *b; for(int i=0;i<n;++i) { if(in[i]==pre[0]) { b=(btree*)malloc(sizeof(btree)); b->date=pre[0]; b->lchild=createbtree(pre+1,in,i); b->rchild=createbtree(pre+i+1,in+i+1,n-i-1); return b; } } return NULL;}void postbtree()//非递归{ stack<btree *>Stack; btree *p=root; do { while(p!=NULL) { Stack.push(p); p=p->lchild; } bool flag=true; btree *r=NULL; while(!Stack.empty()&&flag) { p=Stack.top(); if(p->rchild==r) { Stack.pop(); cout<<p->date; r=p; } else { flag=false; p=p->rchild; } } }while(!Stack.empty()); cout<<endl;}void levelorder(){ btree *b=root; queue<btree*>Queue; Queue.push(b); while(!Queue.empty()) { b=Queue.front(); Queue.pop();//这个没有返回值 cout<<b->date; if(b->lchild!=NULL) Queue.push(b->lchild); if(b->rchild!=NULL) Queue.push(b->rchild); } cout<<endl;}int main(){ int n; cin>>n; while(n--) { cin>>pre>>in; root=(btree *)malloc(sizeof(btree)); root=createbtree(pre,in,strlen(pre)); postbtree(); levelorder(); } return 0;}后序的遍历时对应的递归代码(main函数和postorder函数:
void postbtree(btree *root)//递归{ btree *b=root; if(b!=NULL) { postbtree(b->lchild); postbtree(b->rchild); cout<<b->date; }}int main(){ int n; cin>>n; while(n--) { cin>>pre>>in; root=(btree *)malloc(sizeof(btree)); root=createbtree(pre,in,strlen(pre)); postbtree(root); cout<<endl; levelorder(); } return 0;}
阅读全文
0 0
- SDUT 2137 数据结构实验之求二叉树后序遍历和层次遍历
- SDUT 2137 数据结构实验之求二叉树后序遍历和层次遍历
- sdut 2137 数据结构实验之求二叉树后序遍历和层次遍历
- SDUT 2137 数据结构实验之求二叉树后序遍历和层次遍历
- 数据结构实验之求二叉树后序遍历和层次遍历 SDUT
- 数据结构实验之求二叉树后序遍历和层次遍历 (sdut oj2137)
- sdut oj2137 数据结构实验之求二叉树后序遍历和层次遍历
- SDUT-数据结构实验之求二叉树后序遍历和层次遍历
- 数据结构实验之求二叉树后序遍历和层次遍历
- 数据结构实验之求二叉树后序遍历和层次遍历
- 数据结构实验之求二叉树后序遍历和层次遍历
- 数据结构实验之求二叉树后序遍历和层次遍历
- 数据结构实验之求二叉树后序遍历和层次遍历
- 数据结构实验之求二叉树后序遍历和层次遍历
- 数据结构实验之求二叉树后序遍历和层次遍历
- 数据结构实验之求二叉树后序遍历和层次遍历
- 数据结构实验之求二叉树后序遍历和层次遍历
- 数据结构实验之求二叉树后序遍历和层次遍历
- Codevs2461反质数
- C++智能指针
- 利用JFrame挂菜单栏演示
- 流媒体 基础知识
- 多态新理解
- sdut 2137 数据结构实验之求二叉树后序遍历和层次遍历
- Spark性能调优——基础篇
- 09-面向对象(异常-finally代码块) 10-面向对象(异常-异常应用)1 2 3 4 11-面向对象(异常-异常注意事项)
- Merge k Sorted Lists
- Gaclib 小白使用教程(1)
- 前端基础学习(一)10.30--11.1
- C++ explict关键词详解
- 《智能时代》读书笔记
- SolrCloud 集群详解