#include <iostream>
#include <string>
using namespace std;
typedef struct BiTNode
{
char data;
BiTNode *lc, *rc;
} BiTNode, *BiTree;
/*递归方式*/
BiTree solve(const string &pre, const string &in)
{
if (pre.empty() && in.empty())
return NULL;
BiTree root = new BiTNode;
if (root == NULL)
{
cout << "OVERFLOW\n";
exit(0);
}
int index = in.find(pre[0]);
root->data = pre[0];
/*截取根节点左右子树的前序和中序遍历序列*/
string lpre, rpre, lin, rin;
lin = in.substr(0, index);
rin = in.substr(index + 1, in.size());
lpre = pre.substr(1, lin.size());
rpre = pre.substr(index + 1, pre.size());
/*递归求解根节点的左右子树*/
root->lc = solve(lpre, lin);
root->rc = solve(rpre, rin);
return root;
}
void PostOrderTraverse(const BiTree T)
{
if (T == NULL)
return;
PostOrderTraverse(T->lc);
PostOrderTraverse(T->rc);
cout << T->data;
}
void DelTree(BiTree T)
{
if (T == NULL)
return;
DelTree(T->lc);
DelTree(T->rc);
delete T;
}
int main()
{
BiTree root;
string pre, in;
pre = "ABHFDECKG";
in = "HBDFAEKCG";
root = solve(pre, in);
PostOrderTraverse(root);
DelTree(root);
return 0;
}
已知二叉树前序和中序遍历来构建二叉树
最新推荐文章于 2022-02-17 16:22:51 发布