public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> list = new ArrayList<List<Integer>>();
if (root==null) return list;
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
int levelSize = 1;
List<Integer> levelList = new ArrayList<>();
while (!queue.isEmpty()){
TreeNode node = queue.poll();
levelList.add(node.val);
levelSize--;
if (node.left!=null) queue.offer(node.left);
if (node.right!=null) queue.offer(node.right);
if (levelSize==0){
levelSize = queue.size();
list.add(levelList);
levelList = new ArrayList<>();
}
}
return list;
}
思路
- 由于使每一层都有自己的levelList,所以用一个嵌套的list来保存返回结果
- 如果root==null,直接返回嵌套空表
- 将root存进队列,并创建levelList表对象
- 队列弹出节点,将节点值存进levelList,levelSize减1
- 用levelSize判断当前层的节点是否完全遍历
- levelSize==0时,将当前层的levelList对象存进list中,并给levelList创建空表,最后将下一层节点数目(即队列大小)赋给levelSize
- 返回list