#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MaxSize 10
#define Null -1
#define Tree int
struct TreeNode
{
int data
;
int left
;
int right
;
} T
[MaxSize
];
typedef struct TreeNode TNode
;
typedef struct TreeQueue
{
int *queue
;
int front
, rear
;
} TQueue
;
typedef struct TreeQueue
*PtrQueue
;
PtrQueue
CreatQueue() {
PtrQueue q
=(PtrQueue
)malloc(sizeof(TNode
));
q
->queue
=(int*)malloc(MaxSize
*sizeof(int));
q
->front
=q
->rear
=0;
return q
;
}
bool
isEmpty(PtrQueue q
) {
if(q
->front
==q
->rear
) {
return 1;
} else {
return 0;
}
}
bool
isFull(PtrQueue q
) {
if((q
->rear
+1)%MaxSize
==q
->front
) {
return 1;
} else {
return 0;
}
}
void EnQueue(PtrQueue q
, int x
) {
if(isFull(q
))
return;
else {
q
->queue
[q
->rear
]=x
;
q
->rear
=(q
->rear
+1)%MaxSize
;
}
}
int DeQueue(PtrQueue q
) {
if(isEmpty(q
))
return -1;
else {
int x
=q
->queue
[q
->front
];
q
->front
=(q
->front
+1)%MaxSize
;
return x
;
}
}
Tree
BuildTree(TNode T
[], int N
);
void LevelOrderTraversal
(TNode T
[], Tree Root
, int N
);
int main() {
int N
=0;
scanf("%d",&N
);
Tree Root
;
Root
=BuildTree(T
,N
);
LevelOrderTraversal
(T
,Root
,N
);
return 0;
}
Tree
BuildTree(TNode treeNode
[], int N
) {
char cl
,cr
;
Tree Root
=Null
;
if(N
) {
int check
[MaxSize
];
int i
;
for(i
=0; i
<N
; i
++) {
check
[i
]=0;
}
for(i
=0; i
<N
; i
++) {
treeNode
[i
].data
=i
;
scanf("\n%c %c",&cl
,&cr
);
if(cl
!='-') {
treeNode
[i
].left
=cl
-'0';
check
[treeNode
[i
].left
]=1;
} else {
treeNode
[i
].left
=Null
;
}
if(cr
!='-') {
treeNode
[i
].right
=cr
-'0';
check
[treeNode
[i
].right
]=1;
} else {
treeNode
[i
].right
=Null
;
}
}
for(i
=0; i
<N
; i
++) {
if(!check
[i
])
break;
}
Root
=i
;
}
return Root
;
}
void LevelOrderTraversal
(TNode treeNode
[], Tree Root
, int N
) {
PtrQueue Q
;
int t
;
int num
=0;
if (Root
==-1)
return;
Q
= CreatQueue();
EnQueue( Q
, Root
);
while ( !isEmpty(Q
) ) {
num
++;
t
= DeQueue( Q
);
if((treeNode
[t
].left
==Null
)&&(treeNode
[t
].right
==Null
)){
printf("%d",t
);
if(num
!=N
){
printf(" ");
}
}
if ( treeNode
[t
].left
!=Null
)
EnQueue( Q
, treeNode
[t
].left
);
if ( treeNode
[t
].right
!=Null
)
EnQueue( Q
, treeNode
[t
].right
);
}
}
转载请注明原文地址:https://ipadbbs.8miu.com/read-62708.html