05. Trees (Cây)

🎯 Mục tiêu học tập

  • Hiểu cấu trúc cây và terminologies
  • Cài đặt Binary Tree và Binary Search Tree
  • Thuật toán duyệt cây (Traversal)
  • Ứng dụng cây vào bài toán thực tế

📚 Lý thuyết cơ bản

Tree là gì?

Định nghĩa: Cấu trúc dữ liệu phân cấp gồm các nodes liên kết theo mối quan hệ cha-con.

Terminologies:

  • Root: Node gốc (không có parent)
  • Leaf: Node lá (không có children)
  • Parent/Child: Mối quan hệ cha-con
  • Siblings: Các node cùng parent
  • Depth: Khoảng cách từ root đến node
  • Height: Khoảng cách từ node đến leaf xa nhất
  • Subtree: Cây con

🌳 Các loại Tree

1. Binary Tree

  • Mỗi node tối đa 2 children (left, right)
  • Full Binary Tree: Mỗi node có 0 hoặc 2 children
  • Complete Binary Tree: Tất cả levels đầy, trừ level cuối (fill từ trái)
  • Perfect Binary Tree: Tất cả levels đầy

2. Binary Search Tree (BST)

  • Left subtree < Node < Right subtree
  • Search, insert, delete: O(log n) trung bình

3. Balanced Trees

  • AVL Tree: Self-balancing BST
  • Red-Black Tree: Balanced BST với màu
  • B-Tree: Multi-way tree (databases)

🔄 Tree Traversal

1. Depth-First Search (DFS)

// Inorder: Left → Root → Right
// Preorder: Root → Left → Right  
// Postorder: Left → Right → Root

2. Breadth-First Search (BFS)

// Level Order: Dùng Queue

📋 Bài tập thực hành

  1. Implement Binary Tree
  2. Tree traversals (4 loại)
  3. Binary Search Tree operations
  4. Find height, diameter of tree
  5. Lowest Common Ancestor (LCA)

🚀 Chuẩn bị code

mkdir 05-trees
# Files: BinaryTree.java, BST.java, TreeTraversal.java, TreeProblems.java