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

บทเรียน: Tree & Binary Search Tree

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

โครงสร้างต้นไม้ การ traverse แบบ DFS/BFS และคุณสมบัติของ BST

Tree คือโครงสร้างแบบลำดับชั้น มี root อยู่บนสุด แต่ละ node มี node ลูกได้ Binary tree คือ tree ที่แต่ละ node มีลูกได้ไม่เกิน 2 ตัว (ซ้าย/ขวา) โจทย์ tree ส่วนใหญ่แก้ด้วย recursion ได้สวยงาม

โครงสร้างและการ traverse แบบ DFS

python
class TreeNode:
    def __init__(self, val):
        self.val = val
        self.left = None
        self.right = None

# inorder: ซ้าย -> ตัวเอง -> ขวา
def inorder(node):
    if not node:
        return
    inorder(node.left)
    print(node.val)
    inorder(node.right)

BFS: เดินทีละชั้น (level order)

python
from collections import deque
def level_order(root):
    if not root:
        return []
    res, q = [], deque([root])
    while q:
        node = q.popleft()
        res.append(node.val)
        if node.left:  q.append(node.left)
        if node.right: q.append(node.right)
    return res

Binary Search Tree (BST)

BST คือ binary tree ที่ลูกซ้ายน้อยกว่า node และลูกขวามากกว่าเสมอ ทำให้ค้นหา/เพิ่ม/ลบ เป็น O(log n) เมื่อต้นไม้สมดุล

เจอบ่อย

โจทย์ tree ยอดฮิต: หาความลึก (max depth), เช็คสมดุล, inorder ของ BST ได้ค่าเรียงจากน้อยไปมาก, lowest common ancestor