32_剑指offer_java_从上到下打印二叉树
2020-02-05 14:22
344 查看
题目描述
从上到下打印二叉树的每个节点,同一层的节点按照从左到右的顺序打印。例如下图,则依次打印出1,2,3,4,5,6,7。
二叉树节点如下:
[code]public class BinaryTreeNode { int value; BinaryTreeNode left; BinaryTreeNode right; }
测试用例
- 功能测试(完全二叉树;所有节点只有左子树的二叉树;所有节点只有右子树的二叉树)
- 特殊功能测试(二叉树根节点为空指针;只有一个节点的二叉树)
题目考点
- 考察应聘者的思维能力,想到用队列处理按层遍历。
- 考察应聘者对二叉树及队列的理解。
解题思路
详细见书上表格,使用队列实现树的遍历,打印规律:
1、头节点放入队列;
2、队列不为空,则打印队列的头节点(先入,先出);
3、判断取出的头节点有无子节点。如果有子节点,将其入队列的末尾;如果没有,队列不变;
4、循环,直到队列为空。
参考解题
[code]import java.util.ArrayList; import java.util.LinkedList; import java.util.Queue; /** public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } */ public class Solution { public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) { // 异常 ArrayList<Integer> result = new ArrayList<>(); if(root == null){ return result; } //定义队列(容器),按照打印顺序存储节点 Queue<TreeNode> queue = new LinkedList<>(); // 根节点入队 queue.offer(root);//offer(E e)如果在不违反容量限制的情况下立即执行,则将指定的元素插入到此队列中。 // 循环直到队列为空 while(!queue.isEmpty()){ // 队列不为空,打印队列头节点(放入结果容器) TreeNode node = queue.poll();// 检索并删除此队列的头,如果此队列为空,则返回 null 。 result.add(node.val); //判断取出的头节点有无子节点。如果有子节点,将其入队列的末尾;如果没有,队列不变; if(node.left != null){ queue.offer(node.left); } if(node.right != null){ queue.offer(node.right); } } return result; } }
补充
不管是广度优先遍历一副有向图还是一颗树,都要用到队列或者栈。
1、首先,把起始节点(对树而言是根节点)放入队列;
2、接下来,每次从队列中取出一个节点;
3、遍历这个节点能够达到的节点(对树而言是子节点),依次序放入队列;
4、重复这个遍历过程,直到队列中的节点全部被遍历为止。
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- 剑指Offer 面试题32:从上到下打印二叉树 Java代码实现
- 剑指offer---从上到下打印二叉树(Java)
- 剑指offer----从上到下打印二叉树----java实现
- 剑指offer面试题32:从上到下打印二叉树(c++ 完整代码)
- 剑指offer32.从上到下打印二叉树
- 【剑指offer】面试题32:从上到下打印二叉树
- 【剑指offer】面试题32(2):分行从上到下打印二叉树
- 剑指offer--面试题23:从上往下打印二叉树--Java实现
- 剑指offer面试题23:从上到下打印二叉树(树的层序遍历)
- 从上往下打印出二叉树的每个节点,同层节点从左至右打印(剑指offer,面试题32)
- 剑指Offer——从上到下打印二叉树
- 【剑指offer-解题系列(22)】从上到下打印二叉树
- 剑指Offer面试题22栈的压入弹出序列,面试题23从上到下打印二叉树(层序遍历用队列)
- 剑指Offer面试题23(Java版):从上往下打印二叉树
- 剑指 offer:从上到下打印二叉树(层序遍历)
- 【剑指offer-Java版】23从上往下打印二叉树
- 剑指offer 从上到下打印二叉树
- 剑指offer_22_从上到下打印二叉树
- 剑指Offer--【从上往下打印二叉树】--java
- 剑指Offer:从上往下打印二叉树(层序遍历java版)