剑指Offer23 : 从上而下打印二叉树--层序遍历
2017-04-05 10:45
197 查看
题目:从上往下打印出二叉树的每个节点,同层节点从左至右打印。
思想:打印父节点,将孩子放入队列中。
具体规律:
不管是广度优先遍历一个有向图,还是一棵树,都要用到队列。第一步我们把起始结点(对树而言是根结点)放入到队列中。接下来每一次从队列的头部取出一个结点,遍历这个结点之后把它从它能到达的结点(对树而言是子结点)都依次放入队列中。重复这个比那里过程,直到队列中的结点全部被遍历为止。
题目分析
本题实质是广度优先遍历二叉树。层序打印节点。思想:打印父节点,将孩子放入队列中。
具体规律:
不管是广度优先遍历一个有向图,还是一棵树,都要用到队列。第一步我们把起始结点(对树而言是根结点)放入到队列中。接下来每一次从队列的头部取出一个结点,遍历这个结点之后把它从它能到达的结点(对树而言是子结点)都依次放入队列中。重复这个比那里过程,直到队列中的结点全部被遍历为止。
Java实现
package offer; import java.util.ArrayList; import java.util.LinkedList; import java.util.Queue; public class Solution { class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) { ArrayList<Integer> list = new ArrayList<>(); Queue<TreeNode> queue = new LinkedList<>(); if (root == null) return list; TreeNode node = null; queue.add(root); // 添加根节点 // 终止条件:队列为空 while (!queue.isEmpty()) { // 弹出父节点 node = queue.poll(); // 父节点的孩子入队 if (node.left != null) queue.add(node.left); if (node.right != null) queue.add(node.right); list.add(node.val); } return list; } }
相关文章推荐
- 剑指Offer-->从上向下打印二叉树(层序遍历 + 详解)
- 剑指Offer----面试题23:从上往下打印二叉树(层序遍历)
- 从上到下打印二叉树——层序遍历二叉树
- 剑指Offer面试题22栈的压入弹出序列,面试题23从上到下打印二叉树(层序遍历用队列)
- 剑指offer面试题23:从上到下打印二叉树(树的层序遍历)
- 面试题23:从上往下打印二叉树(层序遍历) && 面试题25:二叉树中和为某一值的路径
- 剑指Offer------从上往下打印二叉树(层序遍历)
- 剑指Offer------把二叉树打印成多行(层序遍历)
- 面试题之对称的二叉树,层序遍历(每层节点打印成一行),平衡二叉树的判断
- 栈的压入、弹出序列 和从上往下打印二叉树(层序遍历)
- 从上到下打印二叉树(层序遍历,广度优先遍历二叉树)
- 从上到下打印二叉树——层序遍历二叉树
- 剑指 offer:从上到下打印二叉树(层序遍历)
- 树——从最下层向上打印二叉树(层序遍历扩展)
- (树的层序遍历)从上往下打印出二叉树的每个节点,同层节点从左至右打印。
- 剑指Offer_面试题23_从上到下打印二叉树(层序遍历)
- 二叉树的(按行打印)层序遍历,树的高度,判断是否为平衡二叉树
- 程序9——层序遍历二叉树(从上往下打印二叉树)
- 树——按“之”字形打印二叉树(层序遍历变型)
- 二叉树的层序遍历