剑指offer-从上往下打印二叉树
2020-03-15 18:24
1361 查看
从上往下打印二叉树
题目描述
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
题解思路
按照题意打印顺序为从上到下,从左到右 8 6 10 5 7 9 11
那么就是可以用一个队列来存储结点。
访问到一个节点,如果该节点有左子节点或者右子节点,就把左子节点和右子节点加入到队列的尾部。从队列的头部开始将节点出队并加给arrarylist,重复这个步骤。直到队列结束。
队列是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作。
LinkedList类实现了Deque接口,Deque接口实现Queue接口,因此我们可以把LinkedList当成Queue来用。
Queue的方法:
offer 和add:
offer()在添加失败时,会返回false,而add()在加入队列失败时。抛出unchecked异常。因为一些队列有大小限制,因此如果想在一个满的队列中加入一个新项,多出的项就会被拒绝
poll和remove:
都是删除队列的第一个元素,但是poll方法在用空集合调用的时候,不会抛出异常,只是会返回一个null,而remove则会抛出异常
peek,element区别:
element() 和 peek() 用于在队列的头部查询元素。与 remove() 方法类似,在队列为空时, element() 抛出一个异常,而 peek() 返回 null。
代码
import java.util.ArrayList; import java.util.LinkedList; import java.util.Queue; /** * @Author liuhaoqi * @Date 2020/3/2 19:31 * @Version 1.0 */ public class Jianzhioffer23 { public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) { //访问到一个结点,如果该结点有子结点,那么就把它的子结点按左子结点到右子结点顺序加入队列的尾部 //然后对队列的头部将最早进入队列的结点放到arraylist中,重复这个操作,直到队列中所有结点都存到arraylist中 ArrayList<Integer> list = new ArrayList<Integer>(); //使用到queue Queue<TreeNode> queue=new LinkedList<TreeNode>(); if (root==null) { return list; } //先将根节点加入队列 queue.offer(root); //遍历队列,直到队列为空 while (!queue.isEmpty()) { //加到list中 TreeNode tempNode=queue.poll(); list.add(tempNode.val); //如果该节点有左子节点或者右子节点,就将它们加入到队列的尾部 if (tempNode.left!= null ) { queue.offer(tempNode.left); } if (tempNode.right!=null) { queue.offer(tempNode.right); } } //得到了一个list结果,将其返回 return list; } }
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- 剑指offer_面试题_从上往下打印二叉树
- 剑指Offer面试题23(Java版):从上往下打印二叉树
- 剑指Offer------从上往下打印二叉树(层序遍历)
- 【剑指offer】面试题23:从上往下打印二叉树
- 剑指offer之从上往下打印二叉树
- 剑指offer - 从上往下打印二叉树
- 剑指offer:从上往下打印二叉树
- 剑指offer-----从上往下打印二叉树
- 剑指Offer学习总结-从上往下打印二叉树
- 【剑指offer】从上往下打印二叉树
- 【剑指 offer】(二十三)—— 从上往下打印二叉树(或曰层次遍历、广度优先遍历)
- 【剑指offer】面试题32(1):从上往下不分行打印二叉树
- 剑指offer-题23:从上往下打印二叉树
- 剑指Offer-23-从上往下打印二叉树
- 【剑指offer】面试题25:从上往下打印二叉树
- 剑指Offer:面试题23 从上往下打印二叉树
- 剑指offer:从上往下打印二叉树(层遍历二叉树)
- 剑指Offer--【从上往下打印二叉树】--java
- 剑指OFFER之从上往下打印二叉树(九度OJ1523)
- 剑指offer—从上往下打印二叉树