Cây tìm kiếm nhị phân (BST)
Cây tìm kiếm nhị phân (BST) sắp xếp dữ liệu để tìm kiếm nhanh như tìm kiếm nhị phân — nhưng thêm/xóa cũng nhanh. Bạn sẽ hiểu tính chất cốt lõi của nó và vì sao có thể tụt xuống O(n).
1. Tính chất BST: trái < gốc < phải
Một BST là cây nhị phân thỏa: với mọi nút, tất cả giá trị bên trái nhỏ hơn nó, tất cả bên phải lớn hơn nó.
┌───┐
│ 8 │
└─┬─┘
┌─────┴─────┐
┌─┴─┐ ┌──┴─┐
│ 3 │ │ 10 │
└─┬─┘ └──┬─┘
┌───┴───┐ └───┐
┌─┴─┐ ┌─┴─┐ ┌───┴┐
│ 1 │ │ 6 │ │ 14 │
└───┘ └───┘ └────┘
Mọi thứ trái 8 đều < 8; mọi thứ phải 8 đều > 8. Tính chất này cho phép bỏ một nửa ở mỗi bước khi tìm — y như tìm kiếm nhị phân trên mảng.
2. Chạy debug: tìm 6 trong BST
Tìm trong BST: so với nút hiện tại, nhỏ hơn đi trái, lớn hơn đi phải. Mỗi bước bỏ một nửa cây:
3. Ba thao tác & độ phức tạp
| Thao tác | Cân bằng | Suy biến (lệch) |
|---|---|---|
| Tìm | O(log n) | O(n) |
| Chèn | O(log n) | O(n) |
| Xóa | O(log n) | O(n) |
Tất cả tỉ lệ với chiều cao cây. Cây cân bằng → cao ~log n → O(log n). Nhưng...
4. Vấn đề: BST có thể SUY BIẾN thành danh sách
Nếu chèn dữ liệu đã sắp xếp (1, 2, 3, 4...) vào BST thường, mỗi nút chỉ có con phải → cây thành
một đường thẳng cao n → tìm kiếm tụt về O(n)!
chèn 1,2,3,4 vào BST thường:
1
\\
2
\\
3
\\
4 ← cao n, không khác gì linked list!
Đây là lý do cần cây tự cân bằng (AVL, red-black) ở hai bài tiếp theo — chúng đảm bảo cây luôn cao ~log n, giữ O(log n) trong mọi trường hợp.
5. Mẫu nhận diện
- Cần tìm kiếm + thêm/xóa đều nhanh VÀ giữ thứ tự → BST (cân bằng).
- Chỉ cần tra cứu nhanh, không cần thứ tự → bảng băm (O(1)) thường hơn.
- Chèn dữ liệu đã sắp xếp vào BST thường → cảnh báo suy biến O(n), cần cây cân bằng.
6. 🎮 Trò chơi: Hiểu BST
7. Quiz kiểm tra nhanh
📚 Đọc thêm & Luyện tập
- William Fiset — Binary Search Tree (playlist DS) — Cài đặt BST chi tiết có source code Java
- NeetCode — Trees playlist — Giải thích ngắn gọn, trực quan
- CSES — Tree Algorithms (bài luyện) — Bộ bài phối hợp tốt với lý thuyết
8. Hoàn thành
…☑️ Tiếp theo: 2.5.3 — Cây cân bằng & AVL.