LeetCode - Binary Tree Level Order Traversal(二元樹的層次遍歷)
題目描述
給定一個二元樹,返回其節點值的層次遍歷結果(即從上到下,逐層訪問每一層的節點)。
範例:
1
2
3
4
5
6
7
8
輸入:
3
/ \
9 20
/ \
15 7
輸出:[[3], [9, 20], [15, 7]]
限制:
- 樹中節點的數量範圍是
[0, 2000]
。 - 節點的值範圍是
[-1000, 1000]
。
解法思路
可以使用廣度優先搜索(BFS)來進行層次遍歷。BFS 可以逐層遍歷每個節點,並將每一層的節點值分別放入結果列表中。
方法:廣度優先搜索
- 初始化隊列:將根節點加入隊列中。
- 逐層處理:在每一層中,計算當前層的節點數量,依次訪問每個節點,並將其左右子節點加入下一層的隊列。
- 記錄每層的節點值:將每一層的節點值存入結果列表中。
- 返回結果:當所有層遍歷完成後,返回結果列表。
範例代碼
以下是 BFS 的 Python 實現:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
from collections import deque
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def levelOrder(root):
if not root:
return []
result = []
queue = deque([root])
while queue:
level_size = len(queue)
level_nodes = []
for _ in range(level_size):
node = queue.popleft()
level_nodes.append(node.val)
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
result.append(level_nodes)
return result
代碼解析
- 初始化:將根節點加入
queue
,初始化結果result
為空。 - 層次遍歷:在每一層中,遍歷當前層的所有節點,並將節點值加入
level_nodes
。 - 更新隊列:將每層結束後的節點值列表
level_nodes
加入result
。 - 返回結果:當所有層遍歷完成後,返回
result
。
時間和空間複雜度
- 時間複雜度:O(N),其中
N
是二元樹中的節點數量,因為每個節點都被訪問一次。 - 空間複雜度:O(N),最壞情況下需要存儲所有節點的引用。
本文章以 CC BY 4.0 授權