Tree & Binary Search Tree
👋 อ่านฟรีทั้งหมดบน Aph's Blog — เนื้อหาภาษาไทย ทำตามทีละหน้าใน sidebar ได้เลย หากมีข้อเสนอแนะหรืออยากให้เพิ่มหัวข้อไหน บอกได้เสมอ
โครงสร้างลำดับชั้น และ BST ที่ค้นหาได้เร็ว O(log n) ด้วย recursion
tree คือโครงสร้างลำดับชั้น (เหมือนแผนผังครอบครัว/โครงสร้างโฟลเดอร์) ที่เจอทุกที่ Binary Search Tree (BST) เป็นชนิดพิเศษที่ค้นหาได้เร็ว และเป็นพื้นฐานของหลายโครงสร้างขั้นสูง
คำศัพท์
| คำ | ความหมาย |
|---|---|
| root | node บนสุด |
| leaf | node ที่ไม่มีลูก |
| child / parent | node ลูก / node แม่ |
| binary tree | แต่ละ node มีลูกได้ไม่เกิน 2 (left, right) |
Binary Search Tree (BST)
BST จัดเรียงให้ค่าน้อยอยู่ซ้าย ค่ามากอยู่ขวา ทำให้ค้นหาเร็ว O(log n) — ตัดครึ่งทุกครั้งที่ลงชั้น
python
class TreeNode:
def __init__(self, value):
self.value = value
self.left = None
self.right = None
def insert(root, value):
if root is None:
return TreeNode(value)
if value < root.value:
root.left = insert(root.left, value)
else:
root.right = insert(root.right, value)
return root
def search(root, value):
if root is None or root.value == value:
return root
if value < root.value:
return search(root.left, value) # ไปซ้าย
return search(root.right, value) # ไปขวาTraversal — เดินผ่านทุก node
วิธีเดิน tree ที่ใช้บ่อยคือ in-order (ซ้าย→ตัวเอง→ขวา) ซึ่งกับ BST จะได้ค่าเรียงจากน้อยไปมาก
python
def in_order(root):
if root is None:
return
in_order(root.left) # ซ้ายก่อน
print(root.value) # ตัวเอง
in_order(root.right) # ขวา
# pre-order: ตัวเอง->ซ้าย->ขวา ; post-order: ซ้าย->ขวา->ตัวเองin-order ของ BST = ค่าเรียงน้อยไปมาก
เพราะ BST เก็บค่าน้อยซ้าย มากขวา การเดิน in-order จึงให้ค่าเรียงลำดับ — เป็นคุณสมบัติที่ใช้ตอบโจทย์ได้บ่อย (เช่น ตรวจว่าเป็น BST ถูกต้องไหม)
สรุปหัวข้อนี้
- tree = โครงสร้างลำดับชั้น (root/leaf/child); binary tree มีลูก ≤ 2
- BST: น้อยซ้าย มากขวา → ค้น/insert O(log n) (ถ้าสมดุล)
- traversal ด้วย recursion: in/pre/post-order
- in-order ของ BST ได้ค่าเรียงจากน้อยไปมาก
แบบฝึกหัด
1) สร้าง BST แล้ว insert ค่า 5,3,7,1,4 2) เขียน in-order traversal ดูว่าได้เรียงไหม 3) นับความสูงของต้นไม้ (recursion) 4) ตรวจว่าค่าหนึ่งอยู่ใน BST ไหมด้วย search