思路:
层序遍历就是从左到右依次遍历。这个时候就可以使用队列的方式。例如先把头节点入队,然后遍历开始,首先计算队列长度,第一层,长度为了,遍历一次,依次出队,头结点出队,然后头结点的左右子节点入队。再次遍历,队列长度为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;}