这道题可以用来练习编码!
代码如下:
/* ID: guo geer PROG: heritage LANG: C++ */ #include<iostream> #include<cstdio> #include<cstring> #include<string> #include<fstream> using namespace std; struct Node { char v; Node *left; Node *right; }; int len; char pre[30], in[30]; Node *head = new Node; int strIndex(int startIndex, int endIndex, char obj) { for(int i=startIndex; i<=endIndex; i++) if(in[i] == obj) return i; } void buildTree(Node *&h, int a, int b, int m, int n) { if(a > b || m > n) return; h = new Node; h->v = pre[m]; h->left = NULL; h->right = NULL; //printf("%d %d %d %d %c" ,a, b, m, n, h->v); //system("pause"); int index = strIndex(a, b, pre[m]); buildTree(h->left, a, index-1, m+1, m+index-a); buildTree(h->right, index+1, b, m+index-a+1, n); } void postOrder(Node *h) { if(h == NULL) return; postOrder(h->left); postOrder(h->right); printf("%c", h->v); } int main() { freopen("heritage.in", "r", stdin); freopen("heritage.out", "w", stdout); while(scanf(" %s", in) == 1) { scanf(" %s", pre); len = strlen(in); buildTree(head, 0, len-1, 0, len-1); postOrder(head); printf("\n"); } return 0; }