1 題目描述
給定一個二元樹,返回其節點值的層序遍歷。換句話說,從左到右,逐層遍歷所有節點。
2 解法
這題很明顯,我們可以使用BFS
的方式來解,因為BFS
是一種逐層遍歷的方式。
我們會需要
next_level
來存放下一層的節點,然後透過呼叫自己,放入next_level
的節點。
nodes
是當層的所有節點。
values
是用來存放當層的節點值。
result
就是結果。
Recursive
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| class Solution: def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]: def bfs_helper(nodes): if not nodes: return next_level, values = [], [] for node in nodes: values.append(node.val) if node.left: next_level.append(node.left) if node.right: next_level.append(node.right) result.append(values) bfs_helper(next_level) result = [] if root: helper(root, 0) return result
|
Iterator
也可以把它寫成迭代的方式。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| class Solution: def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]: if not root: return [] result = [] nodes = [root] while nodes: next_level = [] values = [] for node in nodes: values.append(node.val) if node.left: next_level.append(node.left) if node.right: next_level.append(node.right) result.append(values) nodes = next_level return result
|
3 結論
這題是一個簡單的BFS
問題,只要熟悉BFS
的遍歷方式,就可以很快解出來。