Notes & software courses · Free to learn
Aph's Blog
On this page

Tree & Binary Search Tree

👋 อ่านฟรีทั้งหมดบน Aph's Blog — เนื้อหาภาษาไทย ทำตามทีละหน้าใน sidebar ได้เลย หากมีข้อเสนอแนะหรืออยากให้เพิ่มหัวข้อไหน บอกได้เสมอ

โครงสร้างลำดับชั้น และ BST ที่ค้นหาได้เร็ว O(log n) ด้วย recursion

tree คือโครงสร้างลำดับชั้น (เหมือนแผนผังครอบครัว/โครงสร้างโฟลเดอร์) ที่เจอทุกที่ Binary Search Tree (BST) เป็นชนิดพิเศษที่ค้นหาได้เร็ว และเป็นพื้นฐานของหลายโครงสร้างขั้นสูง

คำศัพท์

คำความหมาย
rootnode บนสุด
leafnode ที่ไม่มีลูก
child / parentnode ลูก / 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