1、题目描述:
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
2、思路:
从上往下逐层遍历二叉树,需要借助外部队列实现,先将根节点放入队列,打印根节点时,遍历根节点是否有左右子节点,然后将根节点的左、右子节点放到队列中存储,然后依次打印其左右子节点,并且在打印的时候,同样检查其是否有子节点,有就放入容器。
简言之,每次从队列中取出一个子节点进行打印,都检查其是否有左右子节点,有就将其存储至队列,重复上面操作,直至打印出所有的节点。
3、代码:java中可以借助ArrayList实现。因为ArrayList实现List接口,其特点就是元素有序,即元素的存入顺序和取出顺序一致。
import java.util.ArrayList; /** 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> list=new ArrayList<Integer>();
//辅助容器 ArrayList<TreeNode> list2=new ArrayList<TreeNode>(); if(root==null){ return list; } list2.add(root); while(list2.size()!=0){ TreeNode temp=list2.remove(0); if(temp.left!=null){ list2.add(temp.left); } if(temp.right!=null){ list2.add(temp.right); } list.add(temp.val); } return list; } }
注意:代码的鲁棒性,检查方法输入空指针。