根据先序遍历以及中序遍历,构造二叉树,输出后序遍历。
代码:
#include <iostream>
#include <cstring>
#include <stdlib.h>
using namespace std;
struct node
{
char c;
struct node *lchild, *rchild;
};
node *Root;
int len;
char pre[30], in[30];
void create(node *&root, int p1, int p2, int i1, int i2) //递归构造二叉树
{
if(i1 > i2)
return;
char c = pre[p1];
int i = i1;
while(in[i] != c) i++;
int cnt = i - i1;
root = new node();
root->c = c;
root->lchild = root->rchild = NULL;
create(root->lchild, p1 + 1, p1 + cnt, i1, i1 + cnt - 1);
create(root->rchild, p1 + cnt + 1, p2, i1 + cnt + 1, i2);
}
void post_order(node *s) //后序遍历
{
if(s == NULL)
return;
post_order(s->lchild);
post_order(s->rchild);
cout << s->c;
}
void destory(node *s) //释放构造的二叉树
{
if(s == NULL)
return;
destory(s->lchild);
destory(s->rchild);
free(s);
}
int main()
{
// freopen("1.txt", "r", stdin);
while(cin >> pre >> in)
{
destory(Root);
len = strlen(pre);
create(Root, 0, len - 1, 0, len - 1);
post_order(Root);
cout << endl;
}
return 0;
}