二叉树层次遍历(包含C语言实现代码)
本节介绍另外一种遍历方式:按照二叉树中的层次从左到右依次遍历每层中的结点。具体的实现思路是:通过使用队列的数据结构,从树的根结点开始,依次将其左孩子和右孩子入队。而后每次队列中一个结点出队,都将其左孩子和右孩子入队,直到树中所有结点都出队,出队结点的先后顺序就是层次遍历的最终结果。

图1 二叉树
层次遍历的实现过程
例如,层次遍历图 1 中的二叉树:
首先,根结点 1 入队;
根结点 1 出队,出队的同时,将左孩子 2 和右孩子 3 分别入队;
队头结点 2 出队,出队的同时,将结点 2 的左孩子 4 和右孩子 5 依次入队;
队头结点 3 出队,出队的同时,将结点 3 的左孩子 6 和右孩子 7 依次入队;
不断地循环,直队列内为空。
实现代码
#include <stdio.h>
#define TElemType int
//初始化队头和队尾指针开始时都为0
int front=0,rear=0;
typedef struct BiTNode{
TElemType data;//数据域
struct BiTNode *lchild,*rchild;//左右孩子指针
}BiTNode,*BiTree;
void CreateBiTree(BiTree *T){
*T=(BiTNode*)malloc(sizeof(BiTNode));
(*T)->data=1;
(*T)->lchild=(BiTNode*)malloc(sizeof(BiTNode));
(*T)->rchild=(BiTNode*)malloc(sizeof(BiTNode));
(*T)->lchild->data=2;
(*T)->lchild->lchild=(BiTNode*)malloc(sizeof(BiTNode));
(*T)->lchild->rchild=(BiTNode*)malloc(sizeof(BiTNode));
(*T)->lchild->rchild->data=5;
(*T)->lchild->rchild->lchild=NULL;
(*T)->lchild->rchild->rchild=NULL;
(*T)->rchild->data=3;
(*T)->rchild->lchild=(BiTNode*)malloc(sizeof(BiTNode));
(*T)->rchild->lchild->data=6;
(*T)->rchild->lchild->lchild=NULL;
(*T)->rchild->lchild->rchild=NULL;
(*T)->rchild->rchild=(BiTNode*)malloc(sizeof(BiTNode));
(*T)->rchild->rchild->data=7;
(*T)->rchild->rchild->lchild=NULL;
(*T)->rchild->rchild->rchild=NULL;
(*T)->lchild->lchild->data=4;
(*T)->lchild->lchild->lchild=NULL;
(*T)->lchild->lchild->rchild=NULL;
}
//入队函数
void EnQueue(BiTree *a,BiTree node){
a[rear++]=node;
}
//出队函数
BiTNode* DeQueue(BiTNode** a){
return a[front++];
}
//输出函数
void displayNode(BiTree node){
printf("%d ",node->data);
}
int main() {
BiTree tree;
//初始化二叉树
CreateBiTree(&tree);
BiTNode * p;
//采用顺序队列,初始化创建队列数组
BiTree a[20];
//根结点入队
EnQueue(a, tree);
//当队头和队尾相等时,表示队列为空
while(front<rear) {
//队头结点出队
p=DeQueue(a);
displayNode(p);
//将队头结点的左右孩子依次入队
if (p->lchild!=NULL) {
EnQueue(a, p->lchild);
}
if (p->rchild!=NULL) {
EnQueue(a, p->rchild);
}
}
return 0;
}
运行结果:
1 2 3 4 5 6 7
- 随机文章
- 编队 访问 马尔代夫(探访马尔代夫:探索这个美丽国家的奇妙之旅)
- 亚洲马尔代夫人口(马尔代夫人口:亚洲中的小国超级之一)
- 孟津白鹤马尔代夫(白鹤马尔代夫:一个在孟津的海洋天堂)
- 抖音山东马尔代夫(山东最美私家岛——马尔代夫再现抖音)
- 影后 马尔代夫(马尔代夫之旅:追随影后足迹)
- 龙虾 马尔代夫(后的新:马尔代夫龙虾大闹美食界)
- 潍坊孤山马尔代夫(潍坊孤山打造仿佛马尔代夫的旅游胜地)
- 渭南马尔代夫现状(探访渭南马尔代夫:如今现状是什么?)
- 色彩马尔代夫作品(美丽的马尔代夫:色彩缤纷的海底世界)
- 江滨公园马尔代夫(江滨公园的马尔代夫式海景:美不胜收)
- 那马尔代夫有中文(马尔代夫:一个靠海洋生活的热带天堂)
- 老马 马尔代夫(李宁收购马尔代夫度假村替代老马)
- 阜阳马尔代夫旅游(阜阳游客假日出海探潜马尔代夫水世界)
- 马尔代夫云南大使(马尔代夫驻云南大使就职仪式隆重举行)
- 兔子 马尔代夫(马尔代夫的可爱兔子:探索动物世界的乐趣)
- 马尔代夫上海转机(从马尔代夫到上海再转机:旅行小贴士)
- 预订马尔代夫旅游(马尔代夫之旅:蓝天碧海下的浪漫度假)
- 马尔代夫中场分析(马尔代夫中场表现亮眼,预示景气复苏)
- 辉县 马尔代夫(河南辉县客家村打造马尔代夫风情旅游新景观)
- 海龟视频马尔代夫(珊瑚岛海龟全景纪录视频惊艳马尔代夫)
- 马尔代夫下海游泳(探索马尔代夫清澈海水的下海游泳之旅)
- 马尔代夫主题美食(美食天堂:探访马尔代夫独特美食文化)
- 马尔代夫印度泰国(三地旅游胜地:马尔代夫、印度、泰国)
- 马尔代夫古来德湖(马尔代夫的古来德湖:清澈如镜的天堂)
- 马尔代夫信号标志(马尔代夫海域航行指南:信号标志详解)
- 马尔代夫去几次好(马尔代夫再次诱惑,来去多次都是享受)
- 马尔代夫地皮出售(马尔代夫出售土地:投资者抓紧机会!)
- 马尔代夫农业品种(新标题:马尔代夫推广多样化农业品种)
- 马尔代夫历代王朝(马尔代夫历史:从古代王朝到现代政府)
- 马尔代夫冬天潜水(马尔代夫冬季潜水,体验清凉海底奇观)
