题目描述
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
思路:
路线层序遍历,方法广度优先搜索,工具队列
注意点:不同于C/C++,声明队列queue<TreeNode*> p; //队列里存放的是地址
java的queue是接口,需要通过其实现类来完成操作
注意:
Queue 接口并未定义阻塞队列的方法,而这在并发编程中是很常见的。 接口定义了那些等待元素出现或等待队列中有可用空间的方法,这些方法扩展了此接口。
Queue 实现通常不允许插入 null 元素,尽管某些实现(如 )并不禁止插入 null。即使在允许 null 的实现中,也不应该将 null 插入到 Queue 中,因为 null 也用作 poll 方法的一个特殊返回值,表明队列不包含元素。
Queue 实现通常未定义 equals 和 hashCode 方法的基于元素的版本,而是从 Object 类继承了基于身份的版本,因为对于具有相同元素但有不同排序属性的队列而言,基于元素的相等性并非总是定义良好的。
1 import java.util.ArrayList; 2 import java.util.Queue; 3 import java.util.LinkedList; 4 /** 5 public class TreeNode { 6 int val = 0; 7 TreeNode left = null; 8 TreeNode right = null; 9 10 public TreeNode(int val) {11 this.val = val;12 13 }14 15 }16 */17 public class Solution {18 public ArrayListPrintFromTopToBottom(TreeNode root) {19 ArrayList array=new ArrayList<>();20 Queue p = new LinkedList ();21 if (root == null) {22 return array;23 }24 25 p.add(root);// 把根节点入队26 27 while (!p.isEmpty()) {28 TreeNode pop1=p.poll(); //每次只会出队一个元素,例如:当前left入队,right入队,left出队,left的俩个孩子入队,然后right出队,right孩子入队...31 array.add(pop1.val);32 33 if (pop1.left != null)34 p.add(pop1.left);35 if (pop1.right != null)36 p.add(pop1.right);37 38 }39 40 return array;41 42 }43 44 }