1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
| #include <stdio.h> #include <stdlib.h> typedef struct tree { struct tree* left, * right; int data; } *Tree, tree; Tree In(Tree gen, Tree parent, int x); Tree Out(Tree gen, int x); void bl(Tree root); int main() { int p; int q; int m; Tree gen = NULL; scanf("%d", &p); for (; p != 0; p--) { scanf("%d", &q); gen = In(gen, gen, q); } scanf("%d", &m); for (;m!=0;m--) { scanf("%d", &q); gen = Out(gen, q); } bl(gen); } Tree In(Tree gen, Tree parent, int x) { if (!gen) { Tree mid = (Tree)malloc(sizeof(tree)); mid->data = x; mid->left = mid->right = NULL; return mid; } if (x < gen->data) gen->left = In(gen->left, gen, x); else gen->right = In(gen->right, gen, x); return gen; } Tree Out(Tree gen, int x) { if (x < gen->data) gen->left = Out(gen->left, x); else if (x > gen->data) gen->right = Out(gen->right, x); if (gen->data == x) if (!gen->left && !gen->right)return NULL; else if (gen->left) { Tree t = gen->left; while (t->right)t = t->right; gen->data = t->data; gen->left = Out(gen->left, t->data); } else { Tree t = gen->right; while (t->left)t = t->left; gen->data = t->data; gen->right = Out(gen->right, t->data); } return gen; } void bl(Tree gen) { Tree queue[110]; int fr = 0, re = 0; queue[re++] = gen; while (fr != re) { Tree t = queue[fr++]; if (t->left)queue[re++] = t->left; if (t->right)queue[re++] = t->right; printf("%d", t->data); if (fr != re)printf(" "); } }
|