LeetCode 102 Binary Tree Level Order Traversal
===================
二叉樹層序遍歷,要求將每一層的元素作為一個列表,最后將每層的列表組成大列表作為返回值。層序遍歷可以使用dfs標記深度,或使用queue直接bfs。
代碼中的細節:
java中二位數組如何定義?
注意實例化時需使用ArrayList。
List<List<Integer>> res = new ArrayList<List<Integer>>();
層序遍歷如何實現將同一行的元素放入同一列表中?
這里需要用變量mark來維護每一層元素的個數,具體地,每層開始時隊列的大小就是該層元素個數。
while (!q.isEmpty())
{ int mark = q.size();
// 若mark個元素均出隊,則認為該層遍歷完畢。
for (int i = 0; i < mark; i++) {
...
}
}
java中隊列Queue的基本操作?
隊列Queue在定義時一般由LinkedList實現。入隊和出隊操作建議使用offer()和poll()方法,因為這兩個方法會返回操作成功與否,若不成功返回false,而不是拋出異常。
具體代碼如下:
public class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> res = new ArrayList<List<Integer>>();
Queue<TreeNode> q = new LinkedList<TreeNode>();
if (root == null) return res;
q.offer(root);
int mark = 0;
while (!q.isEmpty()) {
mark = q.size();
List<Integer> tmpList = new ArrayList<Integer>();
TreeNode tmpNode = new TreeNode(0);
for (int i = 0; i < mark; i++) {
tmpNode = q.poll();
tmpList.add(tmpNode.val);
if (tmpNode.left != null) q.offer(tmpNode.left);
if (tmpNode.right != null) q.offer(tmpNode.right);
}
res.add(tmpList);
}
return res;
}
}