https://www.luogu.com.cn/problem/P1030
题目描述
给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,长度\le 8≤8)。
输入格式
22行,均为大写字母组成的字符串,表示一棵二叉树的中序与后序排列。
输出格式
11行,表示一棵二叉树的先序。
输入输出样例
输入 #1
BADC BDCA
输出 #1
ABCD
思路:利用中序和后序遍历建树,然后先序遍历二叉树。
#include<stdio.h>
#include<string.h>
#include<malloc.h>
struct BinTree{
char data;
BinTree *lchild, *rchild;
} *root;
BinTree* CreateTree(char inorder[], char postorder[], int n){
BinTree *p;
for(int i=0; i<n; i++){
if(inorder[i]==postorder[n-1]){
p = (BinTree *)malloc(sizeof(BinTree));
p->data = postorder[n-1];
p->lchild = CreateTree(inorder, postorder, i);
p->rchild = CreateTree(inorder+i+1, postorder+i, n-i-1);
return p;
}
}
return NULL;
}
void PreOrder(BinTree* head){
if(head){
printf("%c", head->data);
PreOrder(head->lchild);
PreOrder(head->rchild);
}
}
void Release(BinTree* head){
if(head){
Release(head->lchild);
Release(head->rchild);
free(head);
}
}
int main(){
char inorder[10], postorder[10];
while(~scanf("%s %s", &inorder, &postorder)){
int n = strlen(inorder);
root = CreateTree(inorder, postorder, n);
PreOrder(root);
Release(root);
}
return 0;
}