实现代码:
1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include<set> 8 #include 9 #include 10 #include 11 #include<string> 12 #define ll long long 13 #define ull unsigned long long 14 #define inf 0x3f3f3f3f 15 #define inff 0x7fffffff 16 using namespace std; 17 const int N = 10000 + 10; 18 const int M = 200000 + 10; 19 const int mod = 1e9 + 7; 20 21 int pre[N], in[N]; 22 23 typedef struct node* BinTree; 24 25 struct node { 26 int date; 27 BinTree left; 28 BinTree right; 29 }; 30 31 BinTree Build(int pre[], int in[], int size) { 32 33 if (size <= 0) return NULL; 34 int rem = 0; 35 for (int i = 0; i < size; i++) { 36 if (in[i] == pre[0]) { 37 rem = i; 38 break; 39 } 40 } 41 BinTree tree = (BinTree)malloc(sizeof(struct node)); 42 tree->date = pre[0]; 43 tree->left = Build(pre + 1, in, rem); 44 tree->right = Build(pre + rem + 1, in + rem + 1, size - rem - 1); 45 46 return tree; 47 } 48 49 void postorder(BinTree T) { 50 51 if (T == NULL) return; 52 else { 53 postorder(T->left); 54 postorder(T->right); 55 cout << T->date << " "; 56 } 57 58 return; 59 } 60 61 int main() { 62 63 int n; 64 cin >> n; 65 for (int i = 0; i < n; i++) { 66 cin >> pre[i]; 67 } 68 for (int i = 0; i < n; i++) { 69 cin >> in[i]; 70 } 71 BinTree T; 72 T = Build(pre, in, n); 73 postorder(T); 74 75 return 0; 76 }