实现思路

我们来看看下图的二叉链表 如何实现层序遍历

层序遍历顺序:ABECDG
A为B、E的双亲结点,遍历顺序是 根->左->右 是不是。
而且每个结点都是这样的遍历顺序 有木有。那么我们完全可以采用队列的数据结构呗。A入队->然后出队,出队时将其左右孩子入队,循环队列进行出队,每次出队将其左右孩子入队。当队列为空时,整棵树层序遍历完毕。还没明白请看下面过程。
A->出队
队列:E、B
B->出队
队列:D、C、E
E->出队
队列:G、D、C
C->出队
队列:G、D
D->出队
队列:G
G->出队
队列为空,层序遍历完毕

二叉树层序遍历算法代码

层序遍历函数

层序遍历核心代码,利用了一个自己底层封装的顺序队列。如果想知道怎么实现的呢,请看线性表:顺序队列算法实现

//一排一排的遍历 利用队列的特性哟,将根结点入队列 然后然后出入队列,出队列后将其左右孩子结点入队列
//直到队列为空
void SeqTraverse(BiTree tree)
{SeqQueue queue = Init_SeqQueue();Push_SeqQueue(queue, tree);while (!IsEmpty_SeqQueue(queue)){BiTree root = Pop_SeqQueue(queue);printf("%c ", root->data);if (root->lchild)Push_SeqQueue(queue, root->lchild);if(root->rchild)Push_SeqQueue(queue, root->rchild);}printf("\n");
}

完整代码

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include "SeqQueue.h"
typedef char ElemType;
typedef struct BiNode
{ElemType data;struct BiNode* lchild;struct BiNode* rchild;
}BiNode, *BiTree;//创建二叉链表
void CreateBiTree(BiTree* tree)
{char c;scanf("%c", &c);if (c == ' '){*tree = NULL;return;}*tree = malloc(sizeof(BiNode));(*tree)->data = c;CreateBiTree(&(*tree)->lchild);CreateBiTree(&(*tree)->rchild);return;
}
//二叉链表 递归前序遍历
void PreTraverse(BiTree tree)
{if (tree == NULL){return;}printf("%c ", tree->data);PreTraverse(tree->lchild);PreTraverse(tree->rchild);
}//一排一排的遍历 利用队列的特性哟,将根结点入队列 然后然后出入队列,出队列后将其左右孩子结点入队列
//直到队列为空
void SeqTraverse(BiTree tree)
{SeqQueue queue = Init_SeqQueue();Push_SeqQueue(queue, tree);while (!IsEmpty_SeqQueue(queue)){BiTree root = Pop_SeqQueue(queue);printf("%c ", root->data);if (root->lchild)Push_SeqQueue(queue, root->lchild);if(root->rchild)Push_SeqQueue(queue, root->rchild);}printf("\n");
}int main(int argc, char *argv[])
{BiTree tree = NULL;printf("请前序遍历输入结点:");CreateBiTree(&tree);printf("前序遍历:");PreTraverse(tree);printf("\n层序遍历:");SeqTraverse(tree);return 0;
}

代码运行检测

我们构建如下图的二叉树,注意创建二叉树输入序列为:ABC__D__E_G__,_代表一个空格哟。

运行结果

树:二叉树的层序遍历算法(超简洁实现及详细分析)相关推荐

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

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

  2. tree traversal (树的遍历) - 层序遍历 (level order traversal) - 二叉树的层序遍历

    tree traversal (树的遍历) - 层序遍历 (level order traversal) - 二叉树的层序遍历 1. tree traversal (树的遍历) 1.1 深度优先搜索 ...

  3. 代码随想录算法训练营Day15|Leetcode102二叉树的层序遍历、Leetcode226翻转二叉树、Leetcode101对称二叉树

    Day15打卡! 时长:2h 今日感想:今天主要学习了二叉树层次遍历的思路方法和应用.题目看似简单,实则有很多细节,有时间可以做做其他相似的推荐题目~ Leetcode102 二叉树的层序遍历 题目链 ...

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

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

  5. 代码随想录算法训练营第15天,102.二叉树的层序遍历、226.翻转二叉树、101.对称二叉树

    102.二叉树的层序遍历.226.反转二叉树.101.对称二叉树 102.二叉树的层序遍历 二叉树的层次遍历,我们可以定义一个队列, 当访问到某一个节点时,我们将它存在的左右节点放入队列中,便可达到按 ...

  6. 代码随想录算法训练营day15 | 102. 二叉树的层序遍历、226. 翻转二叉树、101. 对称二叉树

    102. 二叉树的层序遍历 class Solution { public:vector<vector<int>> levelOrder(TreeNode* root) {de ...

  7. 代码随想录算法训练营第十五天 | 102. 二叉树的层序遍历 | 226.翻转二叉树 | 101. 对称二叉树

    递归三部曲 确定递归函数的参数和返回值 确定终止条件 确定单层递归的逻辑 102. 二叉树的层序遍历 题解及想法 解法一 :递归法 class Solution {public List<Lis ...

  8. 代码随想录算法训练营第十三天|102.二叉树的层序遍历、226.翻转二叉树、101.对称二叉树

    链接:代码随想录 文章目录 102.二叉树的层序遍历 226.翻转二叉树 101.对称二叉树 解题方法 题目思路 示例代码 总结 解题思路 1.102.二叉树的层次遍历 解题思路 递归法,创立二维数组 ...

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

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

最新文章

  1. 在Ubuntu 14.04 64bit上为Sublime text 3安装搜狗拼音输入法
  2. 微观世界探索者:15家值得关注的纳米技术公司
  3. python 验证回文串
  4. 《NX-OS与Cisco Nexus交换技术:下一代数据中心架构(第2版)》一1.5 VDC
  5. mysql主键自增长_全面的MySQL优化面试解析
  6. 【python】sys.stdout输出不换行
  7. 【Blog】Start My Journey In Cnblogs!
  8. Spring事务—方法调用事务回滚
  9. 玩游戏?或许游戏正在拯救部分人
  10. webgame 上线版本控制
  11. 雷神开机logo更改_开机logo以及两种修改开机动画方法
  12. 中望cad自定义快捷键命令_中望cad常用快捷键及命令
  13. 开滦二中2021高考成绩查询,成人成才 无缝严管丨开滦二中西校区2018高考总结交流大会...
  14. 关于TI、海思(Hisilicon)、安霸(Ambarella)三家的百万高清方案的简单比较
  15. 微服务之springCloud-docker-comsumer(三)
  16. Windows XP 上使用pyqt5 + pyinstaller
  17. VulnHub Billu_b0x
  18. 关于系统架构你不知道的那些事-架构设计流程:评估和选择备选方案
  19. 如何学习 JavaScript
  20. js-判断输入值是不是数字、字符串

热门文章

  1. pd17虚拟机启动器怎么生成?快来看看吧
  2. FCPX无缝扭曲过渡转场Twirl Transition Pack for Mac
  3. WAMP本地环境升级php版本操作步骤(详细)
  4. ngnix 映射路径配置_MyBatis Config(三)映射文件mappers标签
  5. Python学习之Python安装
  6. 记忆化搜索斐波那契c语言,记忆化搜索--优化斐波那契数列递归函数
  7. plaintextedit指定一行一行的高亮显示_LED显示器常见芯片的作用及原理,故障诊断维修...
  8. JavaScript笔记-前端原生态WebSocket的使用
  9. Web前端笔记-移动端触屏移动视角(two.js)
  10. Java笔记-java web实现验证码