从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行
思想:和普通的层次遍历不一样,这题需要记录每一层元素的个数,在一趟 while 就遍历完一层,然后再 add 到结果集里面,每趟遍历开始清零下一层元素个数 level ,每次入队一个结点,level++
- 时间复杂度O(n),n 为结点个数
- 空间都咋读O(1),结果需要开辟的空间,不算在开销里面
public List<List<Integer>> levelOrder(TreeNode root) {List<List<Integer>> res = new ArrayList<>();if (root == null) {return res;}Queue<TreeNode> queue = new LinkedList<TreeNode>();int level = 1; // 该层元素的个数queue.offer(root);while (!queue.isEmpty()){List<Integer> list = new ArrayList<Integer>();// len 保存当前层元素个数,level 重新记录下一层元素个数int len = level;level = 0;for (int i = 0; i < len; i++){TreeNode node = queue.poll();list.add(node.val);if (node.left != null) {queue.offer(node.left);level++;}if (node.right != null) {queue.offer(node.right);level++;}}res.add(list);}return res;
}