题目:
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
public ArrayList<ArrayList<Integer>> levelOrder(TreeNode root) {
if(root == null)
return null;
ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();
LinkedList<TreeNode> queue = new LinkedList<TreeNode>();
queue.add(root);
ArrayList<Integer> list = new ArrayList<Integer>();
int curNum = 0;
int lastNum = 1;
while(!queue.isEmpty()){
TreeNode cur = queue.poll();
list.add(cur.val);
--lastNum;
if(cur.left != null){
queue.add(cur.left);
++curNum;
}
if(cur.right != null){
queue.add(cur.right);
++curNum;
}
if(lastNum == 0){
res.add(list);
lastNum = curNum;
curNum = 0;
list = new ArrayList<Integer>();
}
}
return res;
}