代码:
#include <iostream>
#include <cstring>
using namespace std;
typedef struct BiTNode {
char data;
struct BiTNode *lchild, *rchild;
} BiTNode, *BiTree;
void CreateBiTree(BiTree &T, char *p1, char *p2, int n);
void PostOrderTraverse(BiTree T);
int search(char c, char *p);
int main() {
BiTree T;
char s1[50], s2[50];
cout << "请输入先序序列:" << endl;
cin.getline(s1, 49);
cout << "请输入中序序列:" << endl;
cin.getline(s2, 49);
CreateBiTree(T, s1, s2, strlen(s1));
cout << "该树的后序序列为:" << endl;
PostOrderTraverse(T);
return 0;
}
void CreateBiTree(BiTree &T, char *p1, char *p2, int n) {
if (n > 0)
T = new BiTNode;
T->data = p1[0];
T->lchild = NULL;
T->rchild = NULL;
int k = search(T->data, p2);
string lchildPre, lchildIn, rchildPre, rchildIn;
string q1 = p1, q2 = p2;
if (k) {
lchildPre = q1.substr(1, k);
lchildIn = q2.substr(0, k);
rchildPre = q1.substr(k + 1);
rchildIn = q2.substr(k + 1);
strcpy_s(p1, k + 1, lchildPre.c_str());
strcpy_s(p2, k + 1, lchildIn.c_str());
CreateBiTree(T->lchild, p1, p2, k);
strcpy_s(p1, n - k, rchildPre.c_str());
strcpy_s(p2, n - k, rchildIn.c_str());
CreateBiTree(T->rchild, p1, p2, n - k);
}
}
void PostOrderTraverse(BiTree T) {
if (T) {
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
cout << T->data << ' ';
}
}
int search(char c, char *p) {
int i;
for (i = 0; * (p + i) != c; i++) {
}
return i;
}
运行:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/52ca5aa8231bba2cf45c10d8e2dee225.png)