剑指 Offer 32 - II. 从上到下打印二叉树 II
题目
从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。
例如:
给定二叉树: [3,9,20,null,null,15,7]
返回其层次遍历结果:
1 2 3 4 5
| [ [3], [9,20], [15,7] ]
|
提示:
节点总数 <= 1000
题解
这一题不能被题目描述迷惑,误认为是道顺序遍历题,所有二叉树的题基本都逃不过递归,几乎都可以用递归来解,所以本题的思路也是如此。
既然题目要求自上而下打印,那么我们就自上而下递归,保留层层节点即可,最终再一起输出就可以满足题目要求:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
|
class Solution { List<List<Integer>> nodes = new ArrayList(); public List<List<Integer>> levelOrder(TreeNode root) { traverse(root, 0); return nodes; }
private void traverse(TreeNode root, int k) { if (root != null) { if (nodes.size() <= k) { List<Integer> subNodes = new ArrayList(); nodes.add(subNodes); } nodes.get(k).add(root.val); traverse(root.left, k + 1); traverse(root.right, k + 1); } } }
|