解题思路
本题要求从上至下打印出二叉树的每一个节点,同一层的节点按照从左至右的顺序进行打印。
如示例:

该二叉树遍历打印的结果为:[ 3,9,2,5,7 ]
这是一道典型的 BFS 遍历二叉树,BFS 通常使用队列(Queue)先入先出这种特性来实现。
算法流程:
当树的根节点为空,则直接返回空数组
初始化队列,将 root 根节点添加到队列中
BFS 循环
- 队首元素出队,记作 node;
- 将 node.val 添加到队列列表中;
- 如果 node 的左(右)节点不为空,则将左(右)节点添加到队列。
代码
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode(int x) { val = x; }* }*/class Solution {public int[] levelOrder(TreeNode root) {if(root == null){return new int[]{};}Queue<TreeNode> queue = new LinkedList<>();List<Integer> list = new ArrayList<>();queue.offer(root);while(!queue.isEmpty()){root = queue.poll();list.add(root.val);if(root.left != null){queue.offer(root.left);}if(root.right != null){queue.offer(root.right);}}return list.stream().mapToInt(Integer::valueOf).toArray();}}
复杂度分析
- 时间复杂度:O(N)
我们需要将整棵树进行一次遍历,所以时间复杂度为:O(N)
- 空间复杂度:O(N)
当待遍历的树为一棵平衡二叉树时,最多有 N/2 个节点同时在队列中,所以使用 O(N) 的额外空间
