#include <iostream>
#include <cstring>
#define MAX 50
using namespace std;
typedef char Elem_Type;
typedef struct BiTree
{
Elem_Type data;//数据
struct BiTree *Lchild;//左孩子
struct BiTree *Rchild;//右孩子
}BiTree;
//要查找的元素 查找的地方 数组的长度
int Search_Num(Elem_Type num, Elem_Type *array, int len)
{
for (int i = 0; i<len; i++)
if (array[i] == num)
return i;
//return -1;//没有找到
} //前序结果数组 中序结果数组 数组长度
//根据中后序生成二树
BiTree *Resume_BiTree(Elem_Type *post, Elem_Type *center, int len)
{
if (len <= 0)
return NULL;
BiTree *temp = new BiTree;
temp->data = post[len - 1]; //后序最后一个元素即为根元素
int index = Search_Num(temp->data, center, len);
//遍历左孩子 (后序结果中,从第0个元素开始到第index-1个元素都是左子树)
temp->Lchild = Resume_BiTree(post, center, index);
//遍历右孩子 (后序结果中,从第index个元素开始到第Len-2个元素都是右子树(从0计数))
temp->Rchild = Resume_BiTree(post + index, center + index + 1, len - index - 1);
return temp;
}
void PreOrderTraverse(BiTree *root) //前序遍历输出
{
if (root != NULL)
{
cout << root->data;
PreOrderTraverse(root->Lchild);
PreOrderTraverse(root->Rchild);
}
}
int main(void)
{
Elem_Type *postorder = new Elem_Type[MAX];//后序数组
Elem_Type *inorder = new Elem_Type[MAX];//中序前序数组
cin >> postorder; //先输入后序
cin >> inorder; //再输入前序
BiTree * root = Resume_BiTree(postorder, inorder, strlen(inorder));//由于本例结构元素为char,所以可以用strlen来获元素个数,其他情况可机变
PreOrderTraverse(root);
cout << endl;
delete[] postorder; //释放内存
delete[] inorder;
return 0;
}
温馨提示:答案为网友推荐,仅供参考