#include <stdlib.h> // 利用malloc() #include <stdio.h> typedef struct Node { char data; struct Node* left, * right; } Node, * BTree; // 递归生成树 Node* Partition(char A[], char B[], int LA, int RA, int LB, int RB) { // A为前序遍历,B为后续遍历,L为左边界,R为右边界 if (LA == RA) { // 叶结点 Node* p = (Node*)malloc(sizeof(Node)); p->data = A[LA]; p->left = NULL; p->right = NULL; return p; } // 非叶结点 char root = A[LA]; int i = 0; while (B[i] != root) i++; // B中在i左边都为左子树,右边都为右子树; Node* LNode = NULL; Node* RNode = NULL; if (i > LB) LNode = Partition(A, B, LA + 1, LA + i - LB, LB,i - 1); // 递归处理左子树 if (i < RB) RNode = Partition(A, B, LA + i - LB + 1, RA, i + 1,RB); // 递归处理右子树 Node* ROOT = (Node*)malloc(sizeof(Node)); ROOT->data = root; ROOT->left = LNode; ROOT->right = RNode; return ROOT; } // 后序遍历 void LastPrint(BTree T) { if (T->left) LastPrint(T->left); if (T->right) LastPrint(T->right); printf("%c", T->data); } int main() { char a[30], b[30], c[30]; while (scanf("%s %s", a, b) != EOF) { // 注意 while 处理多个 case // 统计字符串长度 int k = 0; while (a[k] != '\0') { //注意要k-1 k++; } // 生成一棵树T BTree T = (Node*)malloc(sizeof(Node)); T = Partition(a, b, 0, k - 1, 0, k - 1);//递归划分,并生成一棵二叉树 // 后序遍历 LastPrint(T); printf("\n"); } return 0; }