java队列解决层序遍历
求二叉树的层序遍历
http://www.nowcoder.com/questionTerminal/04a5560e43e24e9db4595865dc9c63a3
在这这里我们使用一个队列来解决,层序遍历和二叉树的广度优先遍历很相似,就是额外增加了一个分组的东西。我这里使用int型变量记录本层节点的数量,用next记录下一层节点的数量。当本层节点弹出的时候,now--,当下一层节点添加到队列时候,next++,如此反复直到队列为空。
ArrayList<ArrayList<Integer>> levelOrder;
public ArrayList<ArrayList<Integer>> levelOrder (TreeNode root) {
levelOrder=new ArrayList<ArrayList<Integer>>();
if(root==null)return levelOrder;
LinkedList<TreeNode>queue=new LinkedList<>();
int now=1,next=0;
queue.add(root);
while(!queue.isEmpty()){
ArrayList<Integer> list = new ArrayList<>();
while(now>=1){
TreeNode node = queue.poll();
list.add(node.val);
now--;
if(node.left!=null){
queue.add(node.left);
next++;
}
if(node.right!=null){
queue.add(node.right);
next++;
}
}
now=next;
next=0;
levelOrder.add(list);
}
return levelOrder;
} 