层次遍历二叉树
http://www.oschina.net/code/snippet_257994_10789
1. [代码][C/C++]代码 跳至 [1] [全屏预览]
01 |
#include <stdio.h> |
02 |
#include<stdlib.h> |
03 |
typedef struct Bitree |
04 |
{ |
05 |
int data; |
06 |
struct Bitree *Lchild,*Rchild; |
07 |
}BitreeNode,*LinkBitree; |
08 |
09 |
typedef struct QueueList |
10 |
{ |
11 |
LinkBitree data[20]; |
12 |
int front,rear; |
13 |
}QueueList,*LinkQueue; |
14 |
15 |
LinkBitree CreatBitree(); |
16 |
17 |
void LevelOrderTraverse(LinkBitree); |
18 |
19 |
void InitQueue(LinkQueue); |
20 |
21 |
int main() |
22 |
{ |
23 |
LinkBitree BitreeHead; |
24 |
printf ( "请输入根结点的值e:" ); |
25 |
BitreeHead=CreatBitree(); |
26 |
LevelOrderTraverse(BitreeHead); |
27 |
return 0; |
28 |
} |
29 |
30 |
LinkBitree CreatBitree() |
31 |
{ |
32 |
int e_data; |
33 |
LinkBitree BitreeHead; |
34 |
scanf ( "%d" ,&e_data); |
35 |
if (e_data!=0) |
36 |
{ |
37 |
BitreeHead=(LinkBitree) malloc ( sizeof (BitreeNode)); |
38 |
if (BitreeHead==NULL) |
39 |
{ |
40 |
printf ( "Error!!" ); |
41 |
} |
42 |
else |
43 |
{ |
44 |
BitreeHead->data=e_data; |
45 |
printf ( "请输入结点%d的左孩子结点的值:e= " ,BitreeHead->data); |
46 |
BitreeHead->Lchild=CreatBitree(); |
47 |
printf ( "请输入结点%d的右孩子结点的值:e= " ,BitreeHead->data); |
48 |
BitreeHead->Rchild=CreatBitree(); |
49 |
} |
50 |
} |
51 |
else |
52 |
{ |
53 |
BitreeHead=NULL; |
54 |
} |
55 |
return BitreeHead; |
56 |
} |
57 |
void LevelOrderTraverse(LinkBitree BitreeHead) |
58 |
{ |
59 |
LinkQueue Q; |
60 |
Q=(LinkQueue) malloc ( sizeof ( sizeof (QueueList))); |
61 |
InitQueue(Q); |
62 |
if (BitreeHead!=NULL) |
63 |
{ |
64 |
Q->data[Q->rear]=BitreeHead; |
65 |
Q->rear=Q->rear+1; |
66 |
} |
67 |
while (Q->front!=Q->rear) |
68 |
{ |
69 |
printf ( "%d " ,Q->data[Q->front]->data); |
70 |
if (Q->data[Q->front]->Lchild!=NULL) |
71 |
{ |
72 |
Q->data[Q->rear]=Q->data[Q->front]->Lchild; |
73 |
Q->rear=Q->rear+1; |
74 |
} |
75 |
if (Q->data[Q->front]->Rchild!=NULL) |
76 |
{ |
77 |
Q->data[Q->rear]=Q->data[Q->front]->Rchild; |
78 |
Q->rear=Q->rear+1; |
79 |
} |
80 |
Q->front=Q->front+1; |
81 |
} |
82 |
} |
83 |
void InitQueue(LinkQueue Q) |
84 |
{ |
85 |
Q->front=Q->rear=0; |
86 |
} |