#include<iostream> #include<stdio.h> class Node { public: Node * l; Node *r; int val; Node (int v = 0) { l = NULL; r = NULL; val = v; } }; int find_p (int *mid, int val, int i, int j); void set_tree (Node * &root, int pos, int *pre, int *mid, int left, int right, bool & good); void print_tree (Node * root); int main () { int size; while (scanf ("%d", &size) != EOF) { int *pre = new int[size]; int *mid = new int[size]; for (int i = 0; i < size; i++) scanf ("%d", &pre[i]); for (int j = 0; j < size; j++) scanf ("%d", &mid[j]); Node *root; bool good = true; set_tree (root, 0, pre, mid, 0, size - 1, good); if(good) print_tree (root); else printf("No"); printf ("n"); delete []pre; delete []mid; } return 0; } int find_p (int *mid, int val, int i, int j) { for (i; i <= j; i++) if (mid[i] == val) return i; return -1; } void set_tree (Node * &root, int pos, int *pre, int *mid, int left, int right, bool & good) { if (left > right) return; root = new Node (pre[pos]); int cur = find_p (mid, pre[pos], left, right); if (cur == -1) good = false; if (!good) return; set_tree (root->l, pos + 1, pre, mid, left, cur - 1, good); set_tree (root->r, pos + cur - left + 1, pre, mid, cur + 1, right, good); } void print_tree (Node * root) { if (root == NULL) return; print_tree (root->l); print_tree (root->r); printf ("%d ", root->val); }
|
近期评论