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

二叉树的层序遍历

时间:2015-10-22 23:44:34      阅读:299      评论:0      收藏:0      [点我收藏+]

标签:

 二叉树层序遍历即从上往下、自左而右地访问每个节点,但按这样的顺序的话,相邻访问的两个节点间大多没有直接联系,不易访问,所以会显得比较麻烦,不过我们有队列这个好东西,建一个顺序表队列,里面按顺序存入每个节点的地址,之后在队列中按顺序访问就行了。关键是用队列到底能不能恰好地把每一个节点按从上往下、自左而右的顺序存储起来呢?请看如下分析。

技术分享

local表示当前访问的节点在队列中的位置,length表示队列的长度。local=0时在访问A,此时可把B、C加入队列,length=3;当local=1访问B时,恰好能把D、E依次放在队尾,且队列中的元素顺序符合“层序”,依次类推。显然length最大值会是二叉树元素总数,当最终扫描到最后一个元素时local=length,此时结束循环。实现代码如下:

 1 #define SIZE_OF_QUEUE 256
 2 //lchild指向左子树
 3 //rchild指向右子树
 4 typedef struct BTree{
 5     int data;
 6     struct BTree *lchild;
 7     struct BTree *rchild;
 8 }BT;
 9 
10 void displayByLevel(BT root){
11     BT queue[SIZE_OF_QUEUE];
12     int local;
13     int length;
14     queue[0] = root;
15     local = 0;
16     length = 1;
17     while(local < length){
18         printf("%d\n", queue[local]->data);
19         if(queue[local]->lchild != NULL)
20             queue[length++] = queue[local]->lchild;
21         if(queue[local]->rchild != NULL)
22             queue[length++] = queue[local]->rchild;
23         local++;
24     }
25 }

 

二叉树的层序遍历

标签:

原文地址:http://www.cnblogs.com/liuyuxiao/p/4903064.html

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