数据结构实验之求二叉树后序遍历和层次遍历
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描写叙述
已知一棵二叉树的前序遍历和中序遍历,求二叉树的后序遍历。
输入
输入数据有多组,第一行是一个整数t (t<1000)。代表有t组測试数据。每组包含两个长度小于50 的字符串,第一个字符串表示二叉树的先序遍历序列,第二个字符串表示二叉树的中序遍历序列。
输出
每组第一行输出二叉树的后序遍历序列,第二行输出二叉树的层次遍历序列
演示样例输入
2 abdegcf dbgeafc xnliu lnixu
演示样例输出
dgebfca abcdefg linux xnuli
#include <stdio.h> #include <iostream> #include <cstring> #include <queue> #include <algorithm> using namespace std; typedef struct node { char data; node *lch,*rch; }btree,*bt; char pre[55],ins[55]; void build(bt &T,char *pre,char *ins,int n) //依据先序和中序重建二叉树 { if(n<=0) T=NULL; else { int k=strchr(ins,pre[0])-ins; T=new btree; T->data=pre[0]; build(T->lch,pre+1,ins,k); build(T->rch,pre+k+1,ins+k+1,n-k-1); } } void last(bt T)//后序遍历 { if(T) { last(T->lch); last(T->rch); cout<<T->data; } } void level(bt T) //层次遍历(BFS) { queue <btree> Q; Q.push(*T); while(!Q.empty()) { btree next=Q.front(); Q.pop(); cout<<next.data; if(next.lch) Q.push(*(next.lch)); if(next.rch) Q.push(*(next.rch)); } } int main() { bt root; int n; cin>>n; getchar(); while(n--) { cin>>pre>>ins; build(root,pre,ins,strlen(pre)); last(root); cout<<endl; level(root); cout<<endl; } return 0; }
时间: 2024-10-22 03:24:52