广度优先打印二叉树

  • 题目:从上往下打印出二叉树的每一个节点,同一层节点按照从左到右顺序打印,例如下图中二叉树,依次打印出是8,6,10,5,7,9,11

  • 如上题中二叉树的节点定义我们用之前文章 二叉树实现原理中定义的节点结构。
  • 此处提议就是广度优先原则的一个遍历,但是需要一个从左到右的打印规则,和我们之前二叉树的前序,中序,后续遍历都不一样,
  • 可能开始想到的是中序遍历,每次都打印根节点,但是中序遍历比如左子树中所有节点在右子树之前,和题意不符合。
  • 广度优先原则的话我们想起之前文章:图论,最短路算法,拓扑排序算法,其中拓扑排序算法,和最短路径算法的优化版本都是用的广度优先原则去遍历图。我们依然可以用相同的思路应对
  • 先打印根,然后将根链接的所有节点依据从左到有原则依次加入队列
  • 不断从队列中取出节点打印,并重复上一步,直到队列为空。
步骤 操作 队列
1 打印节点 8 节点6, 节点10
2 打印节点 6 节点10, 节点5,节点7
3 打印节点 10 节点5,节点7,节点9,节点11
4 打印节点 5 节点7,节点9,节点11
5 打印节点 7 节点9,节点11
6 打印节点 9 节点11
7 打印节点 11 null
  • 依据以上分析可得一下代码:
/***  从上到下,按层打印树* @author liaojiamin* @Date:Created in 16:29 2021/4/2*/
public class PrintBinaryTopToBottom {public static void printBinaryTopToEnd(BinaryNode binaryNode){if(binaryNode == null){return;}LinkedList<BinaryNode> myQueue = new LinkedList<BinaryNode>();myQueue.addFirst(binaryNode);while (myQueue.size() > 0){BinaryNode temp = myQueue.removeFirst();if(temp != null){System.out.print(temp.getElement());System.out.print(",");myQueue.addLast(temp.getLeft());myQueue.addLast(temp.getRight());}}}public static void main(String[] args) {BinaryNode node = new BinaryNode(null, null, null);BinarySearchTree searchTree = new BinarySearchTree();Random random = new Random();for (int i = 0; i < 20; i++) {int num = random.nextInt(100);node = searchTree.insert(num, node);System.out.print(num+",");}System.out.println();printBinaryTopToEnd(node);}
}

上一篇:数据结构与算法–举例分析法- 栈的压入弹出序列
下一篇:数据结构与算法-- 二叉树后续遍历序列校验

数据结构与算法-- 广度优先打印二叉树相关推荐

  1. Python数据结构与算法题目 打印二叉树的左视图 打印二叉树的右视图 树的左视图 树的右视图

    阅读目录 题目描述 思路与Python实现 题目描述 输入一棵二叉树,求出树的左视图,或者右视图,如下图所示,的两种情况 思路与Python实现 如果可以用非递归的方式写出二叉树的深度遍历或者广度遍历 ...

  2. 数据结构与算法--死磕二叉树

    死磕二叉树 近一年都比较关注算法相关的知识,也刷了不少题,之前的文章中大多也是算法相关的文章,但是感觉每次遇到树相关的题型都不能应对自如,因此还是有必要在相关知识上下功夫,因此有此次总结,以下是所有树 ...

  3. 数据结构与算法之打印两个有序链表公共部分和判断一个链表是否具有回文结构

    数据结构与算法之打印两个有序链表公共部分和判断一个链表是否具有回文结构 目录 打印两个有序链表公共部分 判断一个链表是否具有回文结构 1. 打印两个有序链表公共部分 1.问题描述 思路:Node1和N ...

  4. 数据结构与算法——树和二叉树***

    第五章 :树和二叉树 树和图是两种重要的非线性结构.线性结构中结点具有唯一前驱和唯一后继的关系,而非线性结构中结点之间的关系不再具有这种唯一性.其中,树形结构中结点间的关系是前驱唯一而后继不唯一,即元 ...

  5. 【数据结构与算法基础】二叉树与其遍历序列的互化 附代码实现(C和java)

    前言 数据结构,一门数据处理的艺术,精巧的结构在一个又一个算法下发挥着他们无与伦比的高效和精密之美,在为信息技术打下坚实地基的同时,也令无数开发者和探索者为之着迷. 也因如此,它作为博主大二上学期最重 ...

  6. 【数据结构与算法基础】二叉树

    写在前面 上面一篇介绍了简单的线性的数据结构浅入浅出数据结构(二)堆栈与队列 这一篇研究一些复杂的数据结构:树和二叉树. 1.二叉树简介 二叉树是一种最简单的树形结构,其特点是树中每个结点至多关联到两 ...

  7. Python__数据结构与算法——树、二叉树(实现先、中、后序遍历)

    目录 一.树 二.二叉树 树和前面所讲的表.堆栈和队列等这些线性数据结构不同,树不是线性的.在处理较多数据时,使用线性结构较慢,而使用树结构则可以提高处理速度.不过,相对于线性的表.堆栈和队列等线性数 ...

  8. 数据结构与算法 | 树与二叉树

    树的概念 二叉树的概念 树的概念和结构 树是一种非线性的数据结构,它是由n个有限结点组成一个具有层次关系的集合,把它叫做树是因为它看起来像一棵倒挂的树,如图所示 有一个特殊的结点,称为根节点,根节点没 ...

  9. PTA 数据结构及算法 7-47 打印选课学生名单

    如有不对,不吝赐教 进入正题: 假设全校有最多40000名学生和最多2500门课程.现给出每个学生的选课清单,要求输出每门课的选课学生名单. 输入格式: 输入的第一行是两个正整数:N(≤40000), ...

最新文章

  1. 【bzoj3150】 cqoi2013—新Nim游戏
  2. 合成(composite)模式
  3. 算法---------前 K 个高频元素(Java版本)
  4. Linux-vmware tools安装与cdrom挂载
  5. golang 反射_云原生的 Java与Golang
  6. PMcaff微分享 | 为什么大部分女生爱星座?大部分男生恨星座?
  7. Linux执行yum不显示时间图形,Linux停的yum命令详解(朝花夕拾)
  8. orelse_可选的orElse vs orElseGet
  9. LeetCode 6061. 买钢笔和铅笔的方案数
  10. ESXI主机的Management网络管理了什么?
  11. html css jq 弹幕,Jquery.barrager.js
  12. (图文)HBASE的知识点以及工作原理的详细解释--架构
  13. 2021年中国债务承销服务市场趋势报告、技术动态创新及2027年市场预测
  14. GS3D An Efficient 3D Object Detection Framework for Autonomous Driving算法解析
  15. 数学建模:评价性模型学习——层次分析法(AHP模型)
  16. 《python股票量化交易从入门到实践》摘要
  17. 弦截法及Python实现
  18. LZJ的圣剑,第二次模拟赛,贪心
  19. HTML标签-排版标签、媒体标签、列表标签、表格标签、表单标签、语义化标签、字符实体
  20. magento 赠品_免费赠品:10个高质量的夏季刻字

热门文章

  1. linux 下执行.sh文件总是提示permission denied
  2. 中国大学mooc慕课python语言程序设计答案_中国大学MOOC(慕课)_Python语言程序设计基础_网课答案...
  3. vue2 怎么用vite_vue3vite简介
  4. 中国第一个发《Nature》的竟然是清朝人!被皇帝夸天下第一,他却觉得羞耻..........
  5. 物理学家杨振宁到底有多厉害?
  6. 三年磨一剑,五次被拒稿,交大博士坚持稿件申诉,终发表学科顶刊
  7. 高糊马赛克秒变高清,表情帝:这还是我吗?
  8. 史上最黑科技 | 人造肌肉、DNA折叠、柔性外骨骼…
  9. 浅谈协同过滤推荐算法
  10. promise的状态以及api介绍_前端 api 请求缓存