【算法筆記第9.2節-樹 】問題 A: 復原二叉樹

題目鏈接

題目描述

小明在做數據結構的作業,其中一題是給你一棵二叉樹的前序遍歷和中序遍歷結果,要求你寫出這棵二叉樹的後序遍歷結果。

輸入

輸入包含多組測試數據。每組輸入包含兩個字符串,分別表示二叉樹的前序遍歷和中序遍歷結果。每個字符串由不重複的大寫字母組成。

輸出

對於每組輸入,輸出對應的二叉樹的後續遍歷結果。

樣例輸入

DBACEGF ABCDEFG
BCAD CBAD

樣例輸出

ACBFGED
CDAB
#include<stdio.h>
#include<string.h>
#include<queue>
#define maxn 100
using namespace std;
char pre[100], in[100];
struct node
{
    char data;
    node* lchild;
    node* rchild;
};
node* creat(int preL, int preR, int inL, int inR)
{
    if(preL > preR)
        return NULL;
    node* root = new node;
    root->data = pre[preL];
    int k;
    for(k=0; k<=inR; k++)
    {
        if(in[k]==pre[preL])
            break;
    }
    int numLeft = k-inL;
    root->lchild = creat(preL+1, preL+numLeft, inL, k-1);
    root->rchild = creat(preL+numLeft+1, preR, k+1, inR);
    return root;
}
node* post(node* root)
{
    if(root==NULL)
        return NULL;
    post(root->lchild);
    post(root->rchild);
    printf("%c",root->data);
}
int main()
{
    while(scanf("%s%s",pre, in)!=EOF)
    {
        getchar();
       // printf("%s %s\n", pre, in);
        node *root = creat(0,strlen(pre)-1, 0, strlen(in)-1);
        post(root);
        printf("\n");
    }

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章