剑指offer——二叉树打印成多行
题目链接:从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
解题思路:
/**
* 从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
* 思路:
* 按层次输出二叉树
* 访问根节点,并将根节点入队。
* 当队列不空的时候,重复以下操作。
* 1、弹出一个元素。作为当前的根节点。
* 2、如果根节点有左孩子,访问左孩子,并将左孩子入队。
* 3、如果根节点有右孩子,访问右孩子,并将右孩子入队。
*/
//此时的queue中存储的都是下一层的节点,则end即为queue大小
1 import java.util.ArrayList; 2 3 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 ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) { 19 20 ArrayList<ArrayList<Integer>> res = new ArrayList<>(); 21 ArrayList<Integer> list = new ArrayList<>(); 22 ArrayList<TreeNode> queue = new ArrayList<>(); 23 if(pRoot==null) 24 return res; 25 int start=0; 26 int end=1; 27 queue.add(pRoot); 28 while(!queue.isEmpty()) 29 { 30 TreeNode node = queue.remove(0); 31 start++; 32 if(node.left!=null) 33 queue.add(node.left); 34 if(node.right!=null) 35 queue.add(node.right); 36 list.add(node.val); 37 38 if(start==end) 39 { 40 res.add(list); 41 start=0; 42 end = queue.size(); 43 list = new ArrayList<>(); 44 } 45 } 46 return res; 47 48 49 } 50 51 }