版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
28.把二叉树打印成多行(174)
-
题目描述:从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
-
思路:在使用队列的层次遍历中,当遍历完上层结点时(上层结点出队),队中的元素全部为下一层的结点。
我们可以控制每一次循环的次数为该层的节点数(队中的元素个数),当将这层结点全部遍历(全部出队)后,换行。然后再开始遍历下一层的结点。
package _28.把二叉树打印成多行; import java.util.ArrayList; import java.util.LinkedList; import java.util.Queue; /** * 题目描述:从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。 * @author Administrator * */ public class PrintTreeInLine { public static ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) { ArrayList<ArrayList<Integer>> print = new ArrayList<>(); if (pRoot == null) return print; Queue<TreeNode> queue = new LinkedList<TreeNode>(); TreeNode node = pRoot; queue.add(node); while (!queue.isEmpty()) { ArrayList<Integer> list = new ArrayList<>(); //将这层结点遍历完后再跳出循环,跳出循环后,队中的元素全部为下一层结点 for(int i = queue.size();i>0;i--){ node = queue.poll(); list.add(node.val); if (node.left != null) queue.add(node.left); if (node.right != null) queue.add(node.right); } print.add(list); } return print; } public static void main(String[] args) { TreeNode root = new TreeNode(0); TreeNode node1 = new TreeNode(1); TreeNode node2 = new TreeNode(2); TreeNode node3 = new TreeNode(3); TreeNode node4 = new TreeNode(4); root.left = node1; root.right = node2; node1.left = node3; node1.right = node4; ArrayList<ArrayList<Integer>> print = Print(root); System.out.println(print); } } class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } }