码迷,mamicode.com
首页 > 其他好文 > 详细

二叉树层序遍历的实现

时间:2015-02-01 23:00:50      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:

我们可以很容易的使用队列来实现二叉树的层序遍历,代码如下:

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #define MAX  10
 4 
 5 
 6 //二叉树存储结构定义
 7 typedef char Item;
 8 typedef struct node *link;
 9 struct node {Item item; link l, r;};
10 
11 int  Create(link *tp);
12 void show(link h);
13 void tranverse(link h, void (*visit)(link));
14 
15 //队列存储结构定义
16 typedef link QItem;
17 static QItem *q;
18 static int    N, head, tail;
19 
20 void  QUEUEinit(int maxN);
21 int   QUEUEempty();
22 void  QUEUEput(QItem item);
23 QItem QUEUEget();
24 
25 
26 int main()
27 {
28     link tree;
29 
30     Create(&tree);
31     tranverse(tree, show);
32 
33     return 0;
34 }
35 
36 void QUEUEinit(int maxN)
37 {
38     q = (QItem *)malloc(maxN * sizeof(QItem));
39     if (!q) return;
40     N = maxN + 1; head = N; tail = 0;
41 }
42 
43 int QUEUEempty()
44 {
45     return head % N == tail;
46 }
47 
48 void QUEUEput(QItem item)
49 {
50     q[tail++] = item;
51     tail = tail % N;
52 }
53 
54 QItem QUEUEget()
55 {
56     head = head % N;
57     return q[head++];
58 }
59 
60 int Create(link *tp)
61 {
62     //构造方法,或者说构造顺序:中序遍历构造
63     char x;
64     scanf("%c",&x);
65     if(x==#)
66     {
67         *tp=NULL;//指针为空,树节点中的某个指针为空
68         return 0;
69     }
70     *tp=(link)malloc(sizeof(**tp));//将树节点中指针指向该地址空间
71     if(*tp==NULL)
72         return 0;
73     (*tp)->item=x;
74     Create(&((*tp)->l));
75     Create(&((*tp)->r));
76     return 1;
77 }
78 
79 void show(link h)
80 {
81     printf(" %c ", h->item);
82 }
83 
84 //层序遍历
85 void tranverse(link h, void (*visit)(link))
86 {
87     QUEUEinit(MAX); QUEUEput(h);
88     while (!QUEUEempty()){
89         (*visit)(h = QUEUEget());
90         if (h->l != NULL) QUEUEput(h->l);
91         if (h->r != NULL) QUEUEput(h->r);
92     }
93 }

 

二叉树层序遍历的实现

标签:

原文地址:http://www.cnblogs.com/xiaomanon/p/4266160.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!