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] ]分析:二叉树的层次遍历,用队列实现
AC代码:
<pre name="code" class="java">import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
public class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> answerList = new ArrayList<List<Integer>>();
Queue<TreeNode> q = new LinkedList<TreeNode>();
TreeNode nextLevelStarter;
q.add(root);
if( root == null )
return answerList;
while( !q.isEmpty() ){
TreeNode currentNode = q.peek();
nextLevelStarter = null;
List<Integer> thisLevelList = new ArrayList<Integer>();
//find nextLevelStart
while( q.peek() != nextLevelStarter && q.isEmpty() == false ){
currentNode = q.remove();
if( nextLevelStarter == null ){
if( currentNode.left != null )
nextLevelStarter = currentNode.left;
else if( currentNode.right != null )
nextLevelStarter = currentNode.right;
}
//add to the thisLevelList
thisLevelList.add(currentNode.val);
if( currentNode.left != null )
q.add(currentNode.left);
if( currentNode.right != null )
q.add(currentNode.right);
}
answerList.add(thisLevelList);
}
return answerList;
}
}
说明:
peek()函数:返回队列头但不删除队列头;
remove()函数:返回队列头并且删除队列头。
参考链接:
http://www.tuicool.com/articles/Evqyemf