二叉树层次遍历

二叉树层次遍历的实现思想是:通过队列数据结构,从树的根结点开始,依次将其左孩子和右孩子入队;而后每次队列中一个结点出队,都将其左孩子和右孩子入队,直到树中所有结点都出队,出队结点的先后顺序就是层次遍历的最终结果

图1 二叉树

以上图 1 为例,层次遍历的过程如下:

  1. 首先,根结点 1 入队
  2. 根结点 1 出队,出队的同时,将左孩子 2 和右孩子 3 分别入队
  3. 队头结点 2 出队,出队的同时,将结点 2 的左孩子 4 和右孩子 5 依次入队
  4. 队头结点 3 出队,出队的同时,将结点 3 的左孩子 6 和右孩子 7 依次入队
  5. 不断地循环,直至队列内为空

因此,图 1 中二叉树采用层次遍历得到的序列为:

二叉树层次遍历代码实现

#include <stdio.h>
#include <stdlib.h>typedef struct MyBiTNode{int data;  // 数据域struct MyBiTNode *lchild, *rchild;  // 左右孩子指针
} BiTNode;BiTNode *CreateBiTree(BiTNode *T){// 结点 1 T = (BiTNode*)malloc(sizeof(BiTNode));T->data = 1;// 结点 2T->lchild = (BiTNode*)malloc(sizeof(BiTNode));T->lchild->data = 2;// 结点 3T->rchild = (BiTNode*)malloc(sizeof(BiTNode));T->rchild->data = 3;// 结点 4 T->lchild->lchild = (BiTNode*)malloc(sizeof(BiTNode));T->lchild->lchild->data = 4;T->lchild->lchild->lchild = NULL;T->lchild->lchild->rchild = NULL;// 结点 5T->lchild->rchild = (BiTNode*)malloc(sizeof(BiTNode));T->lchild->rchild->data = 5;T->lchild->rchild->lchild = NULL;T->lchild->rchild->rchild = NULL;// 结点 6T->rchild->lchild = (BiTNode*)malloc(sizeof(BiTNode));T->rchild->lchild->data = 6;T->rchild->lchild->lchild = NULL;T->rchild->lchild->rchild = NULL;// 结点 7T->rchild->rchild = (BiTNode*)malloc(sizeof(BiTNode));T->rchild->rchild->data = 7; T->rchild->rchild->lchild = NULL;T->rchild->rchild->rchild = NULL;return T;
}// 初始化队头和队尾指针开始时都为 0
int front = 0, rear = 0;// 入队函数
void EnQueue(BiTNode **a, BiTNode *node){a[rear++] = node;// a[0] = Tree; rear = 1// a[1] = Tree->lchild; rear = 2// a[2] = Tree->rchild; rear = 3// a[3] = Tree->lchild->lchild; rear = 4// a[4] = Tree->lchild->rchild; rear = 5// a[5] = Tree->rchild->lchild; rear = 6// a[6] = Tree->rchild->rchild; rear = 7
}// 出队函数
BiTNode *DeQueue(BiTNode **a){return a[front++];// a[0]; front = 1 // a[1]; front = 2// a[2]; front = 3
}//输出函数
void displayNode(BiTNode *node){printf("%d ", node->data);
}// 层次遍历函数
void LevelOrderTraverse(BiTNode *Tree){// 采用顺序队列,初始化创建队列数组BiTNode *a[20];// 创建临时指针 BiTNode *p;// 根结点入队EnQueue(a, Tree);// 当队头和队尾相等时,表示队列为空while(front < rear){// 队头结点出队p = DeQueue(a);  // Tree;Tree->lchild;Tree->rchilddisplayNode(p);  // 1 2 3// 将队头结点的左右孩子依次入队if(p->lchild != NULL) {EnQueue(a, p->lchild);}if (p->rchild != NULL) {EnQueue(a, p->rchild);}}
}int main() {BiTNode *Tree = NULL;  // 结构体指针指向空 Tree = CreateBiTree(Tree);  // 传入结构体指针 LevelOrderTraverse(Tree);  // 层次遍历 return 0;
}

(数据结构)二叉树层次遍历相关推荐

  1. 数据结构-二叉树层次遍历

    首先介绍下二叉树的层次遍历即按照顺序对树节点依次访问,如下图: 顺序遍历的结果为:ABCDEFGHIJK 我们可以借助一个队列来实现二叉树的层次遍历:思路如下: 先将二叉树根节点入队,然后出队,访问该 ...

  2. 二叉树层次遍历:队列

    二叉树层次遍历 二叉树层次遍历的基本算法在本文中不提及.本文内容为,在二叉树层次遍历中,为何选用队列这样一种数据结构. 不使用额外数据结构 首先,假设我们不使用额外的数据结构,只使用 1 个指针: 访 ...

  3. [LeetCode] Binary Tree Level Order Traversal 二叉树层次遍历(DFS | BFS)

    目录: 1.Binary Tree Level Order Traversal - 二叉树层次遍历 BFS 2.Binary Tree Level Order Traversal II - 二叉树层次 ...

  4. 二叉树层次遍历--广度遍历和深度遍历

    问题来源:二叉树层次遍历 问题描述:给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 例子: 给定二叉树: [3,9,20,null,null,15,7], 3/ \9 ...

  5. 由序列确定二叉树:前序序列和中序序列构造二叉树 后序序列和中序序列构造二叉树 层次遍历序列和中序遍历序列构造二叉树 代码实现(c语言)

    下面三种序列可以唯一的构造唯一的一棵二叉树: 前序序列和中序序列构造二叉树 后序序列和中序序列构造二叉树 层次遍历序列和中序遍历序列构造二叉树 #include<stdio.h> #inc ...

  6. 第五期 C/C++数据结构 二叉树的遍历以及结点数、深度

    代码详见后面 实验三 树和二叉树 一.实验目的 1.使学生熟练掌握二叉树的逻辑结构和存储结构(重点). 2.熟练掌握二叉树的各种遍历算法(难点). 二.实验原理及说明 1. 前序遍历算法思想: (1) ...

  7. 树(二叉树层次遍历输出及二叉树前序遍历输入)

    前两篇解释了二叉树的有关逻辑概念及前中后序输出递归代码的实现,这篇将讲述二叉树层次遍历输出如何实现以及二叉树前序遍历输入的两种情况. 定义结构体 struct BiNode{char data;BiN ...

  8. 二叉树的层次遍历_【腾讯面试热身题】二叉树层次遍历(动画展示)

    二叉树的层次遍历同时涉及到树和队列两种数据结构的操作,因此大厂很喜欢用来作为面试的热身题.作者不少去腾讯的小伙伴,都反映,这种题一定要非常熟练,不然会被直接pass. 1 题目描述 给定一个二叉树,按 ...

  9. 二叉树层次遍历c语言_每日一道 LeetCode (23):二叉树的层次遍历 II

    ❝ 每天 3 分钟,走上算法的逆袭之路. ❞ 前文合集 每日一道 LeetCode 前文合集 代码仓库 GitHub:https://github.com/meteor1993/LeetCode Gi ...

最新文章

  1. js 使用a标签 下载资源
  2. 几款不错的VisualStudio2010插件
  3. SQL2017 Azure SQL新功能:图形数据库
  4. leetcode50. Pow(x, n)(快速幂)
  5. leecode26 删除排序数组中的重复项
  6. UNIX(多线程):26---悲观锁和乐观锁
  7. Java ByteArrayInputStream skip()方法与示例
  8. C语言,利用一维数组中选择法对成绩高低排序和输出对应的学号及利用顺序查找查找学生成绩
  9. C/C++排序算法(4)快速排序
  10. java中 在一个异常处理中什么语句块是可多个的
  11. 【LeetCode】【字符串】题号:*299. 猜数字游戏
  12. 【持续更新】实用算法小点总结(怕忘QAQ)
  13. 中国信息安全技术标准体系框架
  14. 坦克世界怎么显示服务器准心,坦克世界设置方法 坦克世界如何设置图像
  15. 文件包含漏洞和上传漏洞
  16. CRAFT: Character Region Awareness for Text Detection ---- 论文翻译
  17. 九州海上牧云记,电视剧节奏太慢?教你如何看全集
  18. 从三字经看古代幼儿教育
  19. elo匹配算法c语言,ELO算法教程
  20. 创建一个有向图,并输出各个节点的出度和入度(邻接矩阵存储)

热门文章

  1. PSH AR0,AC1
  2. Java 接口继承接口 (多继承机制)
  3. mysql inner join_MySQL内连接(INNER JOIN)
  4. matlab dct反变换,MATLAB中 DCT变换、DCT反变换、分块DCT变换
  5. Lua脚本介绍以及编辑器的介绍
  6. centos7 update-grub 命令替代 grub2-mkconfig -o /boot/grub2/grub.cfg
  7. 程序人生 - 人打哈欠可以传染狗吗?
  8. 纽曼Q70 GPS导航仪安装.NET
  9. 图片格式修改--png改为jpg
  10. 面试题:将字符串反转的8种方法,你能想到几种?