求二叉树的先序遍历
Time Limit: 1000MS Memory limit: 65536K
题目描述
已知一棵二叉树的中序遍历和后序遍历,求二叉树的先序遍历
输入
输入数据有多组,第一行是一个整数t (t<1000),代表有t组测试数据。每组包括两个长度小于50 的字符串,第一个字符串表示二叉树的中序遍历序列,第二个字符串表示二叉树的后序遍历序列。
输出
输出二叉树的先序遍历序列
示例输入
2 dbgeafc dgebfca lnixu linux
示例输出
abdegcf xnliu
提示
后序数列中,最后一个字符是二叉树的根结点,根据这一特性,在中序中查找此字符并将中序分成左子树和右子树两个部分,并通过不断递归调用,不断分成更小的左子数和右子树进行构建输
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
struct jied
{
char date;
struct jied *lchild,*rchild;
};
jied* jianshu(char *sz,char *sh,int len)
{
if(len == 0)
return NULL;
jied* T = new jied;
T -> date = *(sh+len-1);
printf("%c",T->date);
int i = 0;
for(; i<len; i++)
{
if(sz[i] == *(sh+len-1))
break;
}
T->lchild = jianshu(sz,sh,i);
T->rchild = jianshu(sz+i+1,sh+i,len-(i+1));
return T;
}
int main(int argc,char* argv[])
{
int len,n;
char sz[100],sh[100];
scanf("%d%*c",&n);
while(n--)
{
gets(sz);
gets(sh);
len = strlen(sz);
jianshu(sz,sh,len);
printf("\n");
}
return 0;
}