题目
给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历)
例如:
给定的二叉树是{3,9,20,#,#,15,7},
该二叉树层序遍历的结果是
[
[3],
[9,20],
[15,7]
]
示例
代码以及思路
在这这里我们使用一个队列来解决,层序遍历和二叉树的广度优先遍历很相似,就是额外增加了一个分组的东西。我这里使用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;
}