1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <malloc.h>
4 #include <string.h>
5 #include <stdbool.h>
6 #include <math.h>
7 #define MAX 1500
8
9 struct TreeNode
10 {
11 int val;
12 struct TreeNode *left;
13 struct TreeNode *right;
14 };
15
16 typedef struct seqqueue
17 {
18 struct TreeNode* data[MAX];
19 int front;
20 int rear;
21 } seqqueue;
22
23 void enter(seqqueue *q,struct TreeNode* t)
24 {
25 q->data[q->rear] = t;
26 q->rear++;
27 }
28
29 struct TreeNode* del(seqqueue *q)
30 {
31 if(q->front == q->rear)
32 {
33 return NULL;
34 }
35 else
36 {
37 q->front++;
38 return q->data[q->front-1];
39 }
40 }
41
42 void level_tree(struct TreeNode* t)
43 {
44 seqqueue q;
45 struct TreeNode* temp;
46 q.front = q.rear = 0;
47 if(!t)
48 {
49 return ;
50 }
51 enter(&q,t);
52 while(q.front != q.rear)
53 {
54 t=del(&q);
55 printf("%d ",t->val);
56 if(t->left)
57 {
58 enter(&q,t->left);
59 }
60 if(t->right)
61 {
62 enter(&q,t->right);
63 }
64 }
65 }
66
67 void exchange(struct TreeNode *root)
68 {
69 struct TreeNode *node = root;
70 if(node != NULL)
71 {
72 struct TreeNode *temp = node -> left;
73 node -> left = node -> right;
74 node -> right = temp;
75 }
76 }
77
78 struct TreeNode* invertTree(struct TreeNode* root)
79 {
80 struct TreeNode *node = root;
81 if(root == NULL)
82 {
83 return root;
84 }
85 invertTree(node->left);
86 invertTree(node->right);
87 exchange(node);
88 return root;
89 }
90
91 int main()
92 {
93 int node_num;
94 while(~scanf("%d",&node_num))
95 {
96 struct TreeNode *node[node_num];
97 int i;
98 for(i = 0; i < node_num; i ++)
99 {
100 node[i] = malloc(sizeof(struct TreeNode));
101 scanf("%d",&node[i]->val);
102 if(node[i]->val==-1)
103 {
104 node[i] = NULL;
105 continue;
106 }
107 node[i] -> left = NULL;
108 node[i] -> right = NULL;
109 }
110 for(i = node_num-1; i > 0; i --)
111 {
112 if(i & 0x1)
113 {
114 node[i/2]->left = node[i];
115 }
116 else
117 {
118 node[i/2-1]->right = node[i];
119 }
120 }
121 struct TreeNode *root = invertTree(node[0]);
122 level_tree(root);
123 printf("\n");
124 }
125 return 0;
126 }