Binary Tree — Khái niệm cây nhị phân
Từ đầu đến giờ, chúng ta toàn làm việc với cấu trúc "Tuyến tính" (Đường thẳng) — nơi mỗi phần tử chỉ có thể đứng trước hoặc đứng sau một phần tử khác. Nhưng thế giới thực thì phức tạp hơn.
Cấu trúc công ty có Giám đốc -> Trưởng phòng -> Nhân viên.
Cấu trúc thư mục máy tính có Ổ C -> Thư mục Windows -> Thư mục System32 -> File DLL.
Trang web bạn đang xem có thẻ <html> -> <body> -> <div> -> <p>.
Tất cả những cấu trúc phân cấp (Hierarchical) đó không thể biểu diễn tốt bằng đường thẳng. Chào mừng bạn đến với cấu trúc mô phỏng tự nhiên nhất: Tree (Cây).
📋 Agenda
Thời gian đọc ước tính: ~6 phút
Sau bài này, bạn sẽ:
- ✅ Hiểu được khái niệm và các thuật ngữ cốt lõi của Tree (Cây).
- ✅ Phân biệt được Tree thông thường và Binary Tree (Cây nhị phân).
- ✅ Trực quan hóa được cấu trúc cây dưới bộ nhớ.
- ✅ Nhận diện được các biến thể của Cây nhị phân (Full, Complete, Perfect).
Yêu cầu đầu vào:
- 🔹 Có kiến thức cơ bản về Linked List (Vì Tree được xây dựng dựa trên Node và Con trỏ).
❓ Tại sao lại phải vẽ Cây?
Vấn đề (Problem Statement):
Bạn đang làm một ứng dụng lưu trữ File tĩnh (giống Google Drive). Bạn có 1 triệu file. Nếu bạn lưu bằng Array hay Hash Table, bạn có thể tìm kiếm rất nhanh tên một file.
NHƯNG, nếu người dùng muốn biết: "Thư mục Hình ảnh có chứa những thư mục con nào?", hay "Xóa toàn bộ thư mục Tài liệu và mọi file bên trong nó" — Array hay Hash Table sẽ bó tay, vì chúng không lưu trữ mối quan hệ Cha-Con.
Giải pháp (Solution):
Tree (Cây). Bằng cách lưu trữ dữ liệu dưới dạng các Nút (Node) liên kết theo mô hình Cha-Con, bạn bảo toàn được cấp bậc của dữ liệu. Việc "Xóa thư mục Tài liệu" đơn giản chỉ là chặt đứt sợi dây liên kết giữa Gốc và Tài liệu, toàn bộ cành lá phía dưới sẽ tự động bị Garbage Collector dọn dẹp.
📖 Cây và Cây nhị phân là gì?
Định nghĩa Tree: Là một cấu trúc dữ liệu gồm nhiều Nút (Node) liên kết với nhau theo mô hình phân cấp, bắt đầu từ một nút gốc (Root) duy nhất. Không có vòng lặp (Cycle) nào được phép tồn tại trong cây (Nếu có vòng lặp, nó trở thành Đồ thị - Graph).
Các thuật ngữ "Lâm nghiệp" cần nhớ
- Root (Gốc): Nút trên cùng, không có Cha. Mọi nút khác đều rẽ nhánh từ đây.
- Node (Nút): Chứa dữ liệu (Value) và liên kết tới các Nút con.
- Leaf (Lá): Nút tận cùng, không có con.
- Parent/Child/Sibling: Mối quan hệ Cha/Con/Anh em (cùng chung một Cha).
- Edge (Cạnh): Đường liên kết nối 2 nút.
- Depth/Level (Độ sâu/Tầng): Nút Gốc là Level 0. Con của nó là Level 1...