算法竞赛入门经典177页,二叉树遍历,水题
题目意思:
给出先序和中序,求后序
本题要点:
1、 一个二叉树的先序和中序,确定一颗唯一的二叉树。
2、写一个递归,由先序和中序建立一颗二叉树
3、再写一个递归,后序遍历二叉树,打印每一节点。
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
const int MaxN = 30;
char pre[MaxN], mid[MaxN];struct node
{
char ch;node* left;node* right;
};node* build(int l1, int r1, int l2, int r2)
{
if(l1 > r1) return NULL;node* root = new node;root->ch = pre[l1];int k;for(k = l2; k <= r2; ++k){
if(mid[k] == pre[l1]){
break;}}root->left = build(l1 + 1, k - l2 + l1, l2, k - 1);root->right = build(k - l2 + l1 + 1, r1, k + 1, r2);return root;
}void postOrder(node* root)
{
if(root){
postOrder(root->left);postOrder(root->right);printf("%c", root->ch);}
}void destroy(node* root)
{
if(root){
destroy(root->left);destroy(root->right);delete root;}
}int main()
{
while(scanf("%s", pre) != EOF){
scanf("%s", mid);int len1 = strlen(pre), len2 = strlen(mid);node* root = build(0, len1 - 1, 0, len2 - 1);postOrder(root);printf("\n");destroy(root);}return 0;
}/* DBACEGF ABCDEFG BCAD CBAD *//* ACBFGED CDAB */