剑指offer(24):从上往下打印二叉树
来源:互联网 发布:淘宝店铺分类怎么修改 编辑:程序博客网 时间:2024/06/05 09:11
题目描述
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
分析
该题实际上是对二叉树进行层序遍历(类似于图的广度优先搜索),需要借助队列来实现。队列具有“先入先出”的特性,最先访问的二叉树的节点,应当最先打印出来。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名企面试官精讲典型编程题(纪念版),电子工业出版社
0 0
- 剑指offer(24):从上往下打印二叉树
- 剑指offer(19)-从上往下打印二叉树
- 剑指offer: 从上往下打印二叉树(树)
- 剑指offer:从上往下打印二叉树
- 剑指offer系列源码-从上往下打印二叉树
- 剑指offer--从上往下打印二叉树
- 剑指Offer之 - 从上往下打印二叉树
- 剑指offer 23 - 从上往下打印二叉树
- 剑指offer之从上往下打印二叉树
- 《剑指offer》之从上往下打印二叉树
- 《剑指offer》从上往下打印二叉树
- 剑指Offer系列---(25)从上往下打印二叉树
- 剑指offer—从上往下打印二叉树
- 剑指Offer-23-从上往下打印二叉树
- 剑指offer:从上往下打印二叉树
- 《剑指offer》——从上往下打印二叉树
- 剑指offer-从上往下打印二叉树
- 剑指offer 22 从上往下打印二叉树
- JAVA网络爬虫 实现爬取百度百家数据示例
- STM32中开漏(open-drain,漏极开路)和推挽(push-pull)以及float input分析
- iOS学习笔记74-完整详解GCD系列(一)dispatch_async;dispatch_sync;dispatch_async_f;dispatch_sync_f
- 两个月攻克系统集成项目管理工程师
- 使用opencv作物件识别(一) —— 积分直方图加速HOG特征计算
- 剑指offer(24):从上往下打印二叉树
- iis7.5 plist和json加载出错处理
- Ceph性能调优
- HTML5一些标签
- Android 布局最佳实践 之 使用自己的 ToolBar
- iOS学习笔记74-完整详解GCD系列(二)dispatch_after;dispatch_apply;dispatch_once
- linux大文件查找
- 关于iOS中的textView
- iOS学习笔记74- 完整详解GCD系列(三)dispatch_group