目录
一、题目
从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。
例如:
给定二叉树:[3,9,20,null,null,15,7]
,3 / \ 9 20 / \ 15 7
返回其层次遍历结果:
[ [3], [9,20], [15,7] ]
提示:
节点总数 <= 1000
二、分析
需要按行来存放;
1、头节点进入队列
2、队列不为空,获取队列大小 k,(k是就是当前层结点的个数)
3、循环取k个结点,这k个结点为其中一层。进入下一此循环
三、代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
if(root==null){
return new ArrayList<>();
}
List<List<Integer>> res = new ArrayList<>();
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
while(!queue.isEmpty()){
// 获取队列大小
int k = queue.size();
List<Integer> temp = new ArrayList<>();
// 循环取出k个结点
for(int i =0;i<k;i++){
TreeNode node =queue.poll();
temp.add(node.val);
// 若当前结点存在左右子
if(node.left!=null){
queue.add(node.left);
}
if(node.right!=null){
queue.add(node.right);
}
}
res.add(temp);
}
return res;
}
}
执行结果