💪 魚~ 加油呀!呀呀呀、一起來學二元樹吧!
二元樹是一種樹狀結構,每個節點最多有兩個子節點:
A (根節點)
/ \
B C
/ \
D E
| 術語 | 說明 |
|---|---|
| 根節點 (Root) | 樹的最頂端節點 |
| 父節點 (Parent) | 有子節點的節點 |
| 子節點 (Child) | 父節點下方的節點 |
| 葉節點 (Leaf) | 沒有子節點的節點 |
| 深度 (Depth) | 從根到該節點的路徑長度 |
| 高度 (Height) | 從該節點到最遠葉節點的路徑長度 |
除了最後一層,其他層都是滿的,且最後一層的節點都靠左排列。
A
/ \
B C
/ \ /
D E F
所有葉節點都在同一層,且每個父節點都有兩個子節點。
A
/ \
B C
/ \ / \
D E F G
所有節點都只有左子節點或右子節點。
A
\
B
\
C
| 遍歷方式 | 順序 | 範例 |
|---|---|---|
| 前序 (Pre-order) | 根 → 左 → 右 | A, B, D, E, C |
| 中序 (In-order) | 左 → 根 → 右 | D, B, E, A, C |
| 後序 (Post-order) | 左 → 右 → 根 | D, E, B, C, A |
class TreeNode:
def __init__(self, value):
self.value = value
self.left = None
self.right = None
# 前序遍歷
def preorder(node):
if node is None: return
print(node.value)
preorder(node.left)
preorder(node.right)
# 中序遍歷
def inorder(node):
if node is None: return
inorder(node.left)
print(node.value)
inorder(node.right)
# 後序遍歷
def postorder(node):
if node is None: return
postorder(node.left)
postorder(node.right)
print(node.value)
特殊的二元樹:
搜尋時間複雜度: O(log n)
💪 魚~ 慢慢來呀!一點一點學,不急的呀!呀呀呀、你可以的!