---
# System prepended metadata

title: 二叉樹的層序遍歷

---

# 二叉樹的層序遍歷

## 概述

與前中後序遍歷不同，層序遍歷是屬於**廣度優先搜索**，使用**Queue**先進先出的特性來實現層序遍歷。

## 層序遍歷的順序

![](https://i.imgur.com/v4O5wwH.png)

## 詳細步驟

1. 創建 Queue
2. 把根節點放入 Queue
3. 開始迴圈，條件設置為 Queue 為空時停止
4. 每層迴圈裡開始第二層迴圈，只走訪當次迴圈Queue內所存在的元素
5. 每次從 Queue 取出一個元素，加入答案中
6. 因為 Queue 先進先出的特性，所以先查看左節點是否存在，如果存在，就加入 Queue
7. 再來查看右節點是否存在，如果存在，就加入 Queue
8. 持續 3 -> 4 -> 5 -> 6 -> 7 直到 Queue 為空為止

```python=!
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
        queue = [root]
        res = []
        while queue:
            level_res = []
            for i in range(len(queue)):
                node = queue.pop(0)
                if node:
                    level_res.append(node.val)
                    if node.left:
                        queue.append(node.left)
                    if node.right:
                        queue.append(node.right)
            if level_res:
                res.append(level_res)
        return res
```

2023.7.21 AC

```python=!
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
        output = []
        if not root:
            return output
        queue = [root]
        while queue:
            length = len(queue)
            ans = []
            for i in range(length):
                node = queue.pop(0)
                ans.append(node.val)
                if node.left:
                    queue.append(node.left)
                if node.right:
                    queue.append(node.right)
            if ans:
                output.append(ans)
        return output
```