102. 二叉树的层序遍历
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。
示例:
二叉树:[3,9,20,null,null,15,7]
,
3
/ \
9 20
/ \
15 7
返回其层序遍历结果:
[
[3],
[9,20],
[15,7]
]
题解:
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> lists = new ArrayList<List<Integer>>();
if(root == null){
return lists;
}
//使用队列,每次让一层的节点入队,记录队列的长度count,出队时每出一个节点count--,它的子节点也就是下一层的入队
Queue<TreeNode> queue = new LinkedList<TreeNode>();
//根节点入队
queue.add(root);
//队列就说明此时遍历完成
while(!queue.isEmpty()){
//记录队列的长度count
int count = queue.size();
//存储每一层的节点
List<Integer> list = new ArrayList<Integer>();
//在循环内将这一层的所有节点出队,存入list,且将下一层的节点入队
while(count > 0){
//出队
TreeNode node = queue.poll();
//存储进入list
list.add(node.val);
//左节点入队
if(node.left != null){
queue.add(node.left);
}
//右节点入队
if(node.right != null){
queue.add(node.right);
}
//出队了一个后count--
count--;
}
//加入每一层的数据
lists.add(list);
}
//返回数据
return lists;
}
}