#include <iostream>
using namespace std;
char post[20],ins[20];
typedef struct BiTNode
{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
BiTree Build_tree(int post_begin,int post_end,int in_begin,int in_end)
{
int i,left_tree_len,right_tree_len;
BiTree root;
root = (BiTNode*)malloc(sizeof(BiTNode));
if (root)
{
root->data = post[post_end];
i = in_begin;
while (ins[i] != root->data)
{
i++;
}
left_tree_len = i - in_begin;
right_tree_len = in_end - i;
if (left_tree_len)
{
BiTree left_root = Build_tree(post_begin,post_begin + left_tree_len - 1,
in_begin,in_begin + left_tree_len - 1);
root->lchild = left_root;
}
else
root->lchild = NULL; //很重要
if (right_tree_len)
{
BiTree right_root = Build_tree(post_end - right_tree_len,post_end - 1,
in_end - right_tree_len + 1,in_end);
root->rchild = right_root;
}
else
root->rchild = NULL;
return root;
}
else
return NULL;
}
void visit(char data)
{
printf("%c ",data);
}
void Preorder(BiTree T) //先序
{
if (T)
{
visit(T->data);
Preorder(T->lchild);
Preorder(T->rchild);
}
}
void main()
{
cout<<"请输入后序遍历序&中序遍历序列:"<<endl;
cin>>post;
cin>>ins;
int i = 0;
while (post[i] != '#')
i++;
BiTree bt = Build_tree(0,i - 1,0,i - 1);
Preorder(bt);
printf("\n");
}
/*
请输入后序遍历序&中序遍历序列:
DFECBKJHIGA#
BDCEFAHJKGI#
A B C D E F G H J K I
*/