标签:print 数据结构与算法 如何 time font offer 换行 integer family
二叉树的层次遍历是指,从二叉树的第一层(根结点)开始,从上至下逐层遍历,在同一层中从左至右依次遍历。
private static void cengci(TreeNode root) { Queue<TreeNode> queue = new LinkedList<TreeNode>(); queue.add(root); while (!queue.isEmpty()) { root = queue.poll(); System.out.print(root.val+"-"); if (root.left != null) { queue.add(root.left); } if (root.right != null) { queue.add(root.right); } } }
按层打印要求,在不同的层打印后加上换行。问题的关键就是如何知道该换行了。只需要两个 node 类型的变量 last 和 nlast 就可以解决。同样进行从左到右的宽度优先遍历,如果发现遍历到的结点等于 last,就该换行了。换行后将 last=nlast,继续下一行的打印,重复过程,直到遍历结束。
private static int[][] ceng(TreeNode root) { List<ArrayList<Integer>> resultMap = new ArrayList<ArrayList<Integer>>(); ArrayList<Integer> ceng = new ArrayList<Integer>(); Queue<TreeNode> queue = new LinkedList<TreeNode>(); TreeNode last = root; TreeNode nlast = null; queue.offer(root); while (!queue.isEmpty()) { root = queue.poll(); ceng.add(root.val); if (root.left != null) { queue.offer(root.left); nlast = root.left; } if (root.right != null) { queue.offer(root.right); nlast = root.right; } if (last==root) { last = nlast; resultMap.add(ceng); ceng = new ArrayList<Integer>(); } } // 转数组 int[][] result = new int[resultMap.size()][]; int i = 0; for (List<Integer> list : resultMap) { int[] temp = new int[list.size()]; int j = 0; for (Integer integer : list) { temp[j++] = integer; } result[i++] = temp; } return result; }
方法返回的是二维数组,一维代表二叉树的层,二维代表每一层所有的结点。
[1] 数据结构与算法分析——Java语言描述, 5.5.4 - 二叉树的层次遍历
[2] 程序员面试代码指南, 第3章 - 二叉树的按层打印
标签:print 数据结构与算法 如何 time font offer 换行 integer family
原文地址:http://www.cnblogs.com/zhengbin/p/6575503.html