题目:
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,null,null,15,7],
3
/ \
9 20
/ \
15 7
return its level order traversal as:
[
[3],
[9,20],
[15,7]
]
思路1:BFS
针对每一层就行操作的话。注意,不能直接在for里面写for(int i=0;i<queue.size();i++),因为在for内部,会向queue offer元素,导致长度改变,for循环会出问题。
while(!queue.isEmpty()){
int size = queue.size();
for(int i=0;i<size;i++){
*****
queue.offer(element);
*****
}
}
代码1:
public List<List<Integer>> levelOrder_BFS(TreeNode root) {
List<List<Integer>> results = new ArrayList<List<Integer>>();
if(root==null){
return results;
}
Queue<TreeNode> q = new LinkedList<TreeNode>();
q.offer(root);
while(!q.isEmpty()){
List<Integer> list = new ArrayList<Integer>();
int size = q.size();
for(int i=0;i<size;i++){
TreeNode curNode = q.poll();
list.add(curNode.val);
if(curNode.left!=null)
q.offer(curNode.left);
if(curNode.right!=null)
q.offer(curNode.right);
}
results.add(list);
}
return results;
}
思路2:DFS
DFS得记录当前的层数,然后在results对于层的list里面添加元素
代码2:
public List<List<Integer>> levelOrder_DFS(TreeNode root) {
List<List<Integer>> results = new ArrayList<List<Integer>>();
if(root==null){
return results;
}
level(root,results,1);
return results;
}
private void level(TreeNode root, List<List<Integer>> results,int level){
if(results.size()<level){
results.add(new ArrayList<Integer>());
}
results.get(level-1).add(root.val);
if(root.left!=null)
level(root.left,results,level+1);
if(root.right!=null)
level(root.right,results,level+1);
}