PAT 1102

题目 : Invert a Binary Tree

分值 : 25
难度 : 水题
思路 : 告诉你节点的左右节点(反转过的),然后让你层序和前序遍历
坑点 : 

具体代码如下

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
#include "stdio.h"
typedef struct Node{
int left =-1;
int right =-1 ;
int rudu = 0 ;
int self ;
} Nodes;
int num ;
Nodes data[20] ;
int Flag = 0 ;
void inorder( int k )
{
if(k!=-1)
{
inorder(data[k].left) ;
if(!Flag++)
printf("%d" , k) ;
else printf(" %d" , k) ;
inorder(data[k].right) ;
}


}
int main() {
scanf("%d" ,& num) ;
for(int i = 0; i<num ; i++)
{
int l ,r ;
char t1[3] ,t2[3] ;
scanf("%s %s" ,t1 ,t2 ) ;
data[i].self = i ;
//printf("%s %s\n",t1,t2) ;
if(t1[0]!='-')
{
data[i].right = t1[0] -'0' ;
data[t1[0] -'0'].rudu++ ;
}
else data[i].right = -1 ;
if(t2[0] !='-')
{
data[i].left = t2[0] - '0' ;
data[t2[0] -'0'].rudu ++ ;
}
else data[i].left = -1 ;
}
Nodes result[num] ;
int cur = 0 ;
int count = 0 ;
int index ;
for(int i = 0 ; i< num ; i++)
if(data[i].rudu == 0 )
{
result[count++] = data[i] ;
index = i ;
}
int flag = 0 ;
while(cur < count)
{
if(result[cur].left != -1 )
result[count++] = data[ result[cur].left ] ;
if(result[cur].right != -1 )
result[count++] = data[ result[cur].right ] ;
if(!flag++)
printf("%d" , result[cur++].self) ;
else
printf(" %d" , result[cur++].self) ;
}
printf("\n");
inorder(index) ;

}