层次遍历二叉树

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 }
posted @ 2013-11-29 20:02  天天向上...  阅读(221)  评论(0编辑  收藏  举报