前言

承接上节,树的非递归三种遍历我们使用了栈,今天讲解的树的层序遍历,我们需要使用另外一种数据结构——队列
我们先简单的回忆一下什么是队列

1.队列

概念:一端入元素,另一端出元素的线性表
一端:队尾
另一端:队头
线性表:顺序表,链表

接下来我们就来完成树的层序遍历吧!

1.根结点入队
2.打印根结点的值并判断当前结点是否有左右子结点
若有,则左右依次入队,此时出队一个元素,并访问其左右子结点
若无,则遍历结束

void LevelOrder(TreeNode* T) {//二叉树的层序遍历if (T == NULL)return;TreeNode* Queue[MaxSize];//队列int front, rear;front = rear = 0;//队空TreeNode* p = NULL;//遍历指针//1.让根节点入队rear = (rear + 1) % MaxSize;Queue[rear] = T;while (front != rear) {front = (front + 1) % MaxSize;p = Queue[front];printf("%d ", p->data);if (p->left != NULL) {//判读左孩子rear = (rear + 1) % MaxSize;Queue[rear] = p->left;}if (p->right != NULL) {//判断右孩子rear = (rear + 1) % MaxSize;Queue[rear] = p->right;}}}

完整代码如下

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#define MaxSize 20typedef struct TreeNode {int data;struct TreeNode* left;struct TreeNode* right;
}TreeNode;void LevelOrder(TreeNode* T) {//二叉树的层序遍历if (T == NULL)return;TreeNode* Queue[MaxSize];//队列int front, rear;front = rear = 0;//队空TreeNode* p = NULL;//遍历指针//1.让根节点入队rear = (rear + 1) % MaxSize;Queue[rear] = T;while (front != rear) {front = (front + 1) % MaxSize;p = Queue[front];printf("%d ", p->data);if (p->left != NULL) {//判读左孩子rear = (rear + 1) % MaxSize;Queue[rear] = p->left;}if (p->right != NULL) {//判断右孩子rear = (rear + 1) % MaxSize;Queue[rear] = p->right;}}}int main() {TreeNode n1;TreeNode n2;TreeNode n3;TreeNode n4;n1.data = 1;n2.data = 3;n3.data = 5;n4.data = 7;n1.left = &n2;n1.right = &n3;n2.left = &n4;n2.right = NULL;n3.left = NULL;n3.right = NULL;n4.left = NULL;n4.right = NULL;printf("层序遍历为:");LevelOrder(&n1);return 0;
}

李白说得好啊:这篇文章写的这真不错,确定不给个关注&点赞!

C语言-二叉树的层序遍历相关推荐

  1. BFS和DFS两种方式实现二叉树的层序遍历

    二叉树文章系列: 二叉树的前序遍历 二叉树的中序遍历 二叉树的后序遍历 二叉树的层序遍历 二叉树的前序.中序.后序.层序遍历[解法完整版] 本文目录 前言 一.题目 二.思路分析 解法一:广度优先搜索 ...

  2. 二叉树的层序遍历 II

    二叉树的层序遍历 II 给定一个二叉树,返回其节点值自底向上的层序遍历. (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) 例如: 给定二叉树 [3,9,20,null,null,15,7] ...

  3. [力扣] 二叉树的层序遍历

    [力扣] 二叉树的层序遍历 广度优先算法,遍历每一层的节点 例题: 102. 二叉树的层序遍历 # Definition for a binary tree node. # class TreeNod ...

  4. 算法--- 二叉树的层序遍历 II

    题目 二叉树的层序遍历 II 给定一个二叉树,返回其节点值自底向上的层序遍历. (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)例如: 给定二叉树 [3,9,20,null,null,15, ...

  5. 二叉树的层序遍历_NC15 求二叉树的层序遍历

    NC15 求二叉树的层序遍历 考过的企业 - 小米 题目描述 给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历) 例如:给定的二叉树是{3,9,20,#,#,15,7},该二叉树 ...

  6. Leetcode 102. Binary Tree Level Order Traversal(二叉树的层序遍历)

    Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...

  7. 一次字节面试,被二叉树的层序遍历捏爆了

    前言 大家好,我是bigsai,在数据结构与算法中,二叉树无论是考研.笔试都是非常高频的考点内容,在二叉树中,二叉树的遍历又是非常重要的知识点,今天给大家讲讲二叉树的层序遍历. 这部分很多人可能会但是 ...

  8. LeetCode 102二叉树的层序遍历103二叉树锯齿形遍历104二叉树的最大深度

    微信搜一搜:bigsai 大家都在关注的刷题.学习数据结构和算法宝藏项目 关注回复进群即可加入力扣打卡群,欢迎划水.近期打卡: LeetCode 97交错字符串(动态规划) LeetCode 98验证 ...

  9. 二叉树的层序遍历算法 + 打印二叉树所有最左边的元素(算法)

    二叉树的层序遍历算法 + 打印二叉树所有最左边的元素(算法) 层序遍历 /** * 树结构定义 */ private static class BinaryNode<T> {BinaryN ...

最新文章

  1. 首字母大写 -freeCodeCamp
  2. php mysql增删改查实例_php连接数据库实现用户数据的增删改查实例
  3. Android开发--TableLayout的应用
  4. 老鼠实验中老鼠的数量变化曲线
  5. UT源码_105032014033
  6. 电路 第五版 第二章 电阻电路的等效变换
  7. python json数组解析_Python读取JSON数据操作实例解析
  8. python查找客户总金额_该程序查找需要支付给所有表现良好的Python的最低金额
  9. 外部类、内部类、局部内部类、匿名类(Java)
  10. Windows服务器放多个网站,测试无数次终于成功了,Windows服务器同时安装多个版本的MySQL的方法!...
  11. apache安装步骤(redhat)
  12. 自学编程,如何找到自己的第一份程序员工作?
  13. STM32F072在8M下的软件延时
  14. 大大学校园计算机市场分析,Acer笔记本计算机营销策略分析以大学生市场为例.doc...
  15. HTML中的元素分类
  16. 中国的ruby on rails 视频
  17. [Pandas] 数据形状df.shape
  18. nofollow是什么意思,nofollow标签的作用是什么?
  19. Ext Gwt 实用例子--类似meebo的聊天界面
  20. python 使用sk_learn :ValueError: Expected 2D array, got 1D array instead

热门文章

  1. linux粘着位的作用
  2. 完整数字华容道04:游戏主体逻辑
  3. 编写一个python程序用来计算投资回收期_计算该项目的投资回收期;
  4. 关于中国大学mooc嵩天老师课程中定向爬取淘宝产品信息
  5. 鼠标的移入、移出事件与css中的hover伪类
  6. MindSpore框架TBE算子开发全流程
  7. 解决近场感知痛点,侧向补盲激光雷达“上车”在即
  8. pandorabox最新固件下载_宝马主机固件升级教程
  9. 【转】Ubuntu改Mac完整版
  10. EPON的VLAN映射实验