重建二叉树与二叉树的层次遍历
2014-07-20 13:27
155 查看
数据结构实验之求二叉树后序遍历和层次遍历
TimeLimit:1000msMemorylimit: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>
usingnamespacestd;
typedefstructnode
{
chardata;
node*lch,*rch;
}btree,*bt;
charpre[55],ins[55];
voidbuild(bt&T,char*pre,char*ins,intn)//根据先序和中序重建二叉树
{
if(n<=0)T=NULL;
else
{
intk=strchr(ins,pre[0])-ins;
T=newbtree;
T->data=pre[0];
build(T->lch,pre+1,ins,k);
build(T->rch,pre+k+1,ins+k+1,n-k-1);
}
}
voidlast(btT)//后序遍历
{
if(T)
{
last(T->lch);
last(T->rch);
cout<<T->data;
}
}
voidlevel(btT)//层次遍历(BFS)
{
queue<btree>Q;
Q.push(*T);
while(!Q.empty())
{
btreenext=Q.front();
Q.pop();
cout<<next.data;
if(next.lch)Q.push(*(next.lch));
if(next.rch)Q.push(*(next.rch));
}
}
intmain()
{
btroot;
intn;
cin>>n;
getchar();
while(n--)
{
cin>>pre>>ins;
build(root,pre,ins,strlen(pre));
last(root);
cout<<endl;
level(root);
cout<<endl;
}
return0;
}
[/code]
相关文章推荐
- uva11234 Expression (二叉树重建+层次遍历)
- UVa 11234 Expressions (二叉树重建&由叶往根的层次遍历)
- UVa 11234 Expressions (二叉树重建&由叶往根的层次遍历)
- 重建二叉树和树的层次遍历
- 根据前序遍历和中序遍历结果重建二叉树(递归方法)
- 二叉树层次遍历
- 102. Binary Tree Level Order Traversal (二叉树层次遍历)
- 剑指offer刷题之c++实现的根据二叉树的前序和中序遍历重建二叉树
- 1935. 二叉树重建(根据先序遍历和中序遍历重建二叉树并进行广度优先遍历)
- 层次遍历二叉树
- 二叉树的创建,前、中、后序遍历以及层次遍历
- 二叉树递归求高度,非递归求高度,层次遍历
- 根据二叉树中序和后序(先序)遍历结果 重建二叉树
- 通过前序(后序), 中序遍历建立二叉树 求解层次遍历
- 二叉树的建立及遍历(先序遍历、中序遍历、后续遍历、层次遍历)
- 数据结构_求二叉树的高度以及层次遍历二叉树算法_C语言源代码
- 二叉树的先序、中序、后序的递归及非递归实现,以及层次遍历的实现:
- 求二叉树的层次遍历oj
- 【面试算法系列】已知二叉树的前序和中序遍历重建二叉树 - C语言实现
- 层次遍历二叉树-三种不同的方法