剑指offer(24):从上往下打印二叉树
2016-04-26 16:55
471 查看
题目描述
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
分析
该题实际上是对二叉树进行层序遍历(类似于图的广度优先搜索),需要借助队列来实现。队列具有“先入先出”的特性,最先访问的二叉树的节点,应当最先打印出来。java类库中LinkedList实现了Queue队列接口(同时,也实现了Stack栈接口)。
牛客AC代码:
问题扩展
广度优先遍历一个有向图和层序遍历一棵树,都需要用到队列Queue。第一步,先把起始节点(对于树来说是root根节点)放入队列中。接下来每一次从队列的队首去除一个节点,遍历这个节点之后把从它能到达的节点(对于树来说是子节点,如果是二叉树,则是左右子节点)依次放入队列。重复这个遍历过程,知道队列中的所有节点全部被遍历为止。
参考
1. 何海涛,剑指offer名企面试官精讲典型编程题(纪念版),电子工业出版社
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
分析
该题实际上是对二叉树进行层序遍历(类似于图的广度优先搜索),需要借助队列来实现。队列具有“先入先出”的特性,最先访问的二叉树的节点,应当最先打印出来。java类库中LinkedList实现了Queue队列接口(同时,也实现了Stack栈接口)。
牛客AC代码:
/** * 从左到右、从上到下打印二叉树 :层序遍历 * * key: 利用队列 Queue, LinkedList实现了Queue接口 * * @param root * @return */ public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) { ArrayList<Integer> list = new ArrayList<Integer>(); if (root == null) return list; Queue<TreeNode> q = new LinkedList<TreeNode>(); q.offer(root); // 将root根节点入队 while (!q.isEmpty()) { // 取出队首节点,遍历,此处为将节点的数值添加到list TreeNode node = q.poll(); list.add(node.val); // 将队首节点能到达的子节点依次入队 if (node.left != null) q.offer(node.left); if (node.right != null) q.offer(node.right); } return list; }
问题扩展
广度优先遍历一个有向图和层序遍历一棵树,都需要用到队列Queue。第一步,先把起始节点(对于树来说是root根节点)放入队列中。接下来每一次从队列的队首去除一个节点,遍历这个节点之后把从它能到达的节点(对于树来说是子节点,如果是二叉树,则是左右子节点)依次放入队列。重复这个遍历过程,知道队列中的所有节点全部被遍历为止。
参考
1. 何海涛,剑指offer名企面试官精讲典型编程题(纪念版),电子工业出版社
相关文章推荐
- 如何解决“Offending key in ~/.ssh/known_hosts” file
- javascript——base64
- jQuery1.72 内存泄露追踪(附解决方案)
- JavaScript绑定事件的方法[3种]
- Bootstrap滚动监听(Scrollspy)插件详解
- d3.js——集群图的绘制
- 剑指offer(23):栈的压入、弹出序列
- HTML——1(HTML 5 文件的基本语法)
- AngularJS基础
- 【剑指offer-Java版】38数字在排序数组中出现的次数
- 基于angularjs的瀑布流插件angular-waterfull.js
- JS组件Bootstrap实现下拉菜单效果代码
- 【剑指offer-Java版】37两个链表的第一个公共结点
- 浏览器窗口大小改变,onresize()事件触发两次
- POST+JSON+XML
- Unsafe与CAS
- JavaScript原型与原型链学习笔记
- 【剑指offer-Java版】36数组中的逆序对
- 关于项目中一些前端框架的问题汇总(持续更新)
- 【剑指offer-Java版】35第一个只出现一次的字符