数据结构实验之求二叉树后序遍历和层次遍历
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
已知一棵二叉树的前序遍历和中序遍历,求二叉树的后序遍历。
输入
输入数据有多组,第一行是一个整数t (t<1000),代表有t组测试数据。每组包括两个长度小于50 的字符串,第一个字符串表示二叉树的先序遍历序列,第二个字符串表示二叉树的中序遍历序列。
输出
每组第一行输出二叉树的后序遍历序列,第二行输出二叉树的层次遍历序列
示例输入
2 abdegcf dbgeafc xnliu lnixu
示例输出
dgebfca abcdefg linux xnuli
提示
来源
ma6174
示例程序
#include <bits/stdc++.h>
using namespace std;
int cnt;
char a[1100], b[1100];
struct node
{
char data;
node *lchild, *rchild;
} *root;
struct node *creat()
{
node *root;
root = new node;
root->lchild = NULL;
root->rchild = NULL;
return root;
}
struct node *build(int low, int high, int _begin)
{
int flag;
if(low > high)
return NULL;
struct node *root;
root = creat();
root->data = a[_begin];
for(int i = low; i <= high; i++)
{
if(a[_begin] == b[i])
{
flag = i;
break;
}
}
root->lchild = build(low, flag-1, _begin+1);
root->rchild = build(flag+1, high, _begin+flag+1-low);
return root;
}
void houxu(struct node *root)
{
if(root)
{
houxu(root->lchild);
houxu(root->rchild);
printf("%c", root->data);
}
}
void cengxu(struct node *root)
{
queue<node *>q;
q.push(root);
struct node *ans;
ans = new node;
while( !q.empty())
{
ans = q.front();
q.pop();
if(ans)
{
printf("%c", ans->data);
q.push(ans->lchild);
q.push(ans->rchild);
}
}
}
int main()
{
int n;
while(cin >> n)
{
while(n--)
{
cin >> a;
cin >> b;
int l = strlen(a);
root = build(0, l-1, 0);
houxu(root);
cout << endl;
cengxu(root);
cout << endl;
}
}
return 0;
}