题目描述
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
思路分析
和剑指offer(22)思路基本一致,不过加入了两个变量,start记录已打印节点数,end记录当前层总节点数,以此来实现分层
代码
public class 把二叉树打印成多行 { ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) { ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>(); if (pRoot == null){ return list; } Queue<TreeNode> queue = new LinkedList<TreeNode>(); ArrayList<Integer> list1 = new ArrayList<Integer>(); queue.offer(pRoot); int start = 0; //当前层数已添加节点数 int end = 1; //当前层数目标添加节点数 while (!queue.isEmpty()){ TreeNode temp = queue.poll(); list1.add(temp.val); start++; if (temp.left != null) { queue.offer(temp.left); } if (temp.right != null) { queue.offer(temp.right); } if (start == end) { end = queue.size(); //本层的所有节点已出队,队列中所剩刚好是下一层的全部节点 start = 0; list.add(list1); list1 = new ArrayList<Integer>(); } } return list; } public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } }
结果