思路:
层序遍历就是从左到右依次遍历。这个时候就可以使用队列的方式。例如先把头节点入队,然后遍历开始,首先计算队列长度,第一层,长度为了,遍历一次,依次出队,头结点出队,然后头结点的左右子节点入队。再次遍历,队列长度为2,在出队入队,队列长度为4。这样每次每次遍历都是把当层的所有节点轮询完成,然后每个节点的左右节点在入队,完成下一层的关联。
代码如下:
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> ans = new LinkedList<>();
if (root==null){
return ans;
}
//构建一个队列 先进先出
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
while (!queue.isEmpty()){
List<Integer> list = new ArrayList<>();
//每次记录 queue的长度
int size = queue.size();
for (int i = 0; i <size ; i++) {
TreeNode cur = queue.poll();
if (cur.left!=null){
queue.add(cur.left);
}
if (cur.right!=null){
queue.add(cur.right);
}
list.add(cur.val);
}
ans.add(list);
}
return ans;
}