剑指offer之面试题23:从上往下打印二叉树
2016-04-26 11:58
489 查看
题目描述
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
思路:二叉树的层次遍历
初始化队列,结点8入队,结点8出队,8的孩子结点不为空,把8的孩子结点6,10放进队列中。6出队,6的孩子结点不为空,把6的孩子结点5,7放进队列中,现在队列中为10,5,7,然后10出队,…,直到叶子结点入队,结束。
用表格的形式展现:
总结一下:每次出队,如果结点有孩子结点,则将其孩子结点入队。然后队首元素出队,循环,直到队列为空。
根据分析,写代码如下:
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
输入二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 输出 8,6,10,5,7,9,11
思路:二叉树的层次遍历
初始化队列,结点8入队,结点8出队,8的孩子结点不为空,把8的孩子结点6,10放进队列中。6出队,6的孩子结点不为空,把6的孩子结点5,7放进队列中,现在队列中为10,5,7,然后10出队,…,直到叶子结点入队,结束。
用表格的形式展现:
步骤 | 操作 | 队列 |
---|---|---|
1 | 8入队 | 8 |
2 | 8出队,8孩子节点6,10入队 | 6,10 |
3 | 6出队,6孩子节点5,7入队 | 10,5,7 |
4 | 10出队,10孩子节点9,11入队 | 5,7,9,11 |
5 | 5出队,孩子节点为空,不需入队 | 7,9,11 |
6 | 7出队,孩子节点为空,不需入队 | 9,11 |
7 | 9出队,孩子节点为空,不需入队 | 11 |
8 | 11出队,孩子节点为空,不需入队 |
根据分析,写代码如下:
import java.util.ArrayList; /** public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } */ import java.util.Queue; import java.util.LinkedList; public class Solution { public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) { ArrayList<Integer> list=new ArrayList<Integer>(); if(root==null) return list; Queue<TreeNode> queue=new LinkedList<TreeNode>(); queue.offer(root); while(!queue.isEmpty()){ TreeNode temp=queue.poll(); list.add(temp.val); if(temp.left!=null) queue.offer(temp.left); if(temp.right!=null) queue.offer(temp.right); } return list; } }
相关文章推荐
- 对程序员说的一些话
- 如何准备阿里社招面试,顺谈Java程序员学习中各阶段的建议
- web前端面试题:
- iTerm2-程序员必备神器(Mac)
- 大神博客地址列表
- About JAVA ,You Should Know-程序员的自我修养
- 程序员的书架上应该放的书
- 黑马程序员_java 基础
- Java面试题
- 面试题--多线程互斥(线程安全)
- 面试题--多线程
- Android面试题
- 那些著名或非著名的iOS面试题(中) 4000
- 那些著名或非著名的iOS面试题(上)
- 面试中的排序算法总结
- 奋斗吧,程序员——第十五章 去年今日此门中,人面桃花相映红
- 一个三流城市小团队程序员的随笔(2)
- Java笔试面试题整理第三波
- 最难面试问题?这样回答才满意!
- 职场小白,一路走来的心路历程