Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).
For example:
Given binary tree {3,9,20,#,#,15,7}
,
3
/ \
9 20
/ \
15 7
return its level order traversal as:[
[3],
[9,20],
[15,7]
]
考查BFS 宽度优先搜索。实现BFS可以采用队列。
为了实现层序遍历需要知道该层有几个节点,用于控制每一层从Queue中共取多少个元素。
由于输出完该层节点之后,队列中剩下的是该层的下一层所有的子节点。因此可以用Queue.size() 来知道下一层有多少个节点,以此来控制一共从队列中取多少个元素。
1 /** 2 * Definition for a binary tree node. 3 * public class TreeNode { 4 * int val; 5 * TreeNode left; 6 * TreeNode right; 7 * TreeNode(int x) { val = x; } 8 * } 9 */ 10 public class Solution { 11 public List<List<Integer>> levelOrder(TreeNode root) { 12 List<List<Integer>> result = new ArrayList<>(); 13 14 if (root == null) { 15 return result; 16 } 17 18 Queue<TreeNode> queue = new LinkedList<TreeNode>(); 19 queue.offer(root); 20 21 while (!queue.isEmpty()) { 22 ArrayList<Integer> list = new ArrayList<>(); 23 int size = queue.size(); 24 for (int i = 0; i < size; i++) { 25 TreeNode node = queue.poll(); 26 list.add(node.val); 27 if (node.left != null) { 28 queue.offer(node.left); 29 } 30 if (node.right != null) { 31 queue.offer(node.right); 32 } 33 } 34 result.add(list); 35 } 36 37 return result; 38 } 39 }