题目描述
根据中序序列和后序序列,建立二叉树。输出这棵二叉树的先序遍历序列。
结点个数<=50
第一行:中序序列
第二行:后序序列
样例输入 Copy
DBEACGF
DEBGFCA
样例输出 Copy
ABDECFG
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct Node{
char data;
struct Node* Lchild;
struct Node* Rchild;
}BiTNode, *BiTree;
void PreOrder(BiTree root) //先序遍历二叉树
{
if(root)
{
printf("%c", root->data);
PreOrder(root->Lchild);
PreOrder(root->Rchild);
}
}
void InOrder(BiTree root) //中序遍历二叉树
{
if(root)
{
InOrder(root->Lchild);
printf("%c", root->data);
InOrder(root->Rchild);
}
}
void PostOrder(BiTree root) //后序遍历二叉树
{
if(root)
{
PostOrder(root->Lchild);
PostOrder(root->Rchild);
printf("%c", root->data);
}
}
//由中后遍历确定二叉树
void CreateTree1(BiTree* root, char* mid, char* post, int n)
{
int flag = 0;
*root = (BiTree)malloc(sizeof(BiTNode));
if(n == 0)
{
*root = NULL;
return;
}
(*root)->data = post[n-1];
for(int i = 0; i < n; i++)
{
if(mid[i] == (*root)->data)
{
flag = i;
break;
}
}
CreateTree1(&((*root)->Lchild), mid, post, flag);
CreateTree1(&((*root)->Rchild), mid+flag+1, post+flag, n-flag-1);
}
int main()
{
BiTree root;
char mid[100];
char post[100];
memset(mid, 0, 100);
memset(post, 0, 100);
gets(mid);
gets(post);
CreateTree1(&root, mid, post, strlen(mid));
PreOrder(root);
return 0;
}