剑指 Offer 32 - I. 从上到下打印二叉树
一、题目
从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。
二、思路
二叉树的 广度优先搜索(BFS)。
三、代码
class Solution { public int[] levelOrder(TreeNode root) { if(root == null) return new int[0]; Queue<TreeNode> queue = new LinkedList<>(){{ add(root); }}; ArrayList<Integer> ans = new ArrayList<>(); while(!queue.isEmpty()) { TreeNode node = queue.poll(); ans.add(node.val); if(node.left != null) queue.add(node.left); if(node.right != null) queue.add(node.right); } int[] res = new int[ans.size()]; for(int i = 0; i < ans.size(); i++) res[i] = ans.get(i); return res; } }
四、分析
复杂度分析:
- 时间复杂度 O(N) : N为二叉树的节点数量,即 BFS 需循环 N次。
-
空间复杂度 O(N): 最差情况下,即当树为平衡二叉树时,最多有 N/2个树节点同时在 queue 中,使用 O(N) 大小的额外空间。