Cây nhị phân tìm kiếm Cây nhị phân tìm kiếm là một cây nhị phân trong đó nút của nó được tổ chức để luôn thỏa tính chất sau đây “Giá trị của nút cha luôn lớn hơn giá trị tất cả nút con b
Trang 1Chương 5
Cấu trúc dữ liệu cây
Trang 25.1 Định nghĩa
Câ là ột ấ t ú t đó b ồ á út đượ
Cây là một cấu trúc trong đó bao gồm các nút được
liên kết với nhau theo hệ thống phân cấp, trong đó nút
có cấp cao nhất được gọi là nút gốc và nút có cấp thấp
nhất được gọi là các nút lá
nhất được gọi là các nút lá
Trang 35.1 Định nghĩa
Trang 4- Nút gốc (root) là nút không có nút cha.
- Nút lá (leaf – leaves) là nút không có nút con
- Cấp của 1 nút (level of a node) là các liên kết để đip ( )
Trang 55.2 Cây nhị phân
5 2 1 Khái niệm về cây nhị phân
ỗCây nhị phân là một cây mà mỗi nút có không quá 2 nútcon
Trang 65 2 2 Cây nhị phân tìm kiếm
5.2 Cây nhị phân tìm kiếm
5.2.2 Cây nhị phân tìm kiếm
Cây nhị phân tìm kiếm là một cây nhị phân trong đó nút
của nó được tổ chức để luôn thỏa tính chất sau đây “Giá
trị của nút cha luôn lớn hơn giá trị tất cả nút con bên trái và nhỏ hơn giá trị của tất cả nút con bên phải”.
Trang 75 2 2 Cây nhị phân tìm kiếm
5.2 Cây nhị phân
5.2.2 Cây nhị phân tìm kiếm
Trang 85 2 2 Cây nhị phân tìm kiếm
5.2 Cây nhị phân
5.2.2 Cây nhị phân tìm kiếm
Biểu diễn cây nhị phân tìm kiếm
Trang 95 2 2 Cây nhị phân tìm kiếm
5.2 Cây nhị phân
5.2.2 Cây nhị phân tìm kiếm
Các thao tác trên cây nhị phân tìm kiếm
Khởi tạo cây
Kiểm tra cây rỗng
int isEmpty (Tree t)
{
return (t root == NULL);
return (t.root == NULL);
}
Trang 105 2 2 Cây nhị phân tìm kiếm
5.2 Cây nhị phân
5.2.2 Cây nhị phân tìm kiếm
Các thao tác trên cây nhị phân tìm kiếm
Thêm một nút vào cây
Giả sử cần thêm 1 nút có khóa k vào cây t
- So sánh với nút gốc: nếu nhỏ hơn thì sang trái lớn hơnSo sánh với nút gốc: nếu nhỏ hơn thì sang trái, lớn hơnthì sang phải
- So sánh với nút gốc của cây con bên trái (phải) và lặplại quá trình trên cho đến khi tìm được vị trí thích hợp
lại quá trình trên cho đến khi tìm được vị trí thích hợp
Trang 115.2 Cây nhị phân
5 2 2 Cây nhị phân tìm kiếm
Các thao tác trên cây nhị phân tìm kiếm
Thêm một nút vào cây
int Ins (pNode &r, int k)
Trang 125.2 Cây nhị phân
5 2 2 Cây nhị phân tìm kiếm
Các thao tác trên cây nhị phân tìm kiếm
Thêm một nút vào cây
Trang 135.2 Cây nhị phân
5 2 2 Cây nhị phân tìm kiếm
Các thao tác trên cây nhị phân tìm kiếm
Thêm một nút vào cây
Trang 145.2 Cây nhị phân
5 2 2 Cây nhị phân tìm kiếm
Các thao tác trên cây nhị phân tìm kiếm
Trang 155.2 Cây nhị phân
5 2 2 Cây nhị phân tìm kiếm
Các thao tác trên cây nhị phân tìm kiếm
Trang 165.2 Cây nhị phân
5 2 2 Cây nhị phân tìm kiếm
Các thao tác trên cây nhị phân tìm kiếm
Trang 175.2 Cây nhị phân
5 2 2 Cây nhị phân tìm kiếm
Các thao tác trên cây nhị phân tìm kiếm
Tìm khóa k có trong cây hay không
int Search(pNode r,int k)
Trang 185.2 Cây nhị phân
5 2 2 Cây nhị phân tìm kiếm
Các thao tác trên cây nhị phân tìm kiếm
Xóa một nút X
- X là nút lá: chỉ đơn giản hủy X vì nó không móc nối
đến phần tử nào khác
Trang 195.2 Cây nhị phân
5 2 2 Cây nhị phân tìm kiếm
Các thao tác trên cây nhị phân tìm kiếm
Trang 205.2 Cây nhị phân
5 2 2 Cây nhị phân tìm kiếm
Các thao tác trên cây nhị phân tìm kiếm
Xóa một nút X
- X có đủ cả 2 con: không thể hủy trực tiếp do X có đủ 2
con ⇒ hủy gián tiếp Thay vì hủy X, ta sẽ tìm một phần
tử thế mạng Y Phần tử này có tối đa một con Thông tin
Trang 225.2 Cây nhị phân
5 2 2 Cây nhị phân tìm kiếm
Có thể dùng 15
Trang 235.2 Cây nhị phân
5 2 3 Cây nhị phân cân bằng
Định nghĩa
Cây cân bằng hoàn toàn là cây nhị phân tìm kiếm mà
tại mỗi nút của nó, số nút của cây con trái chênh lệch
không quá một so với số nút của cây con phải
Cây Cân Bằng Hoàn Toàn
Cây CCBHT thì h ~ log2n
Cây nhị phân tìm kiếm cân bằng hoàn toàn
Trang 24• Trong trường hợp xấu nhất ta chỉ phải tìm qua log n phần tử (n
• Trong trường hợp xấu nhất ta chỉ phải tìm qua log2n phần tử (n
là số nút trên cây).
• Do CCBHT là một cấu trúc kém ổn định nên trong thực tế không Do CCBHT là một cấu trúc kém ổn định nên trong thực tế không thể sử dụng Nhưng ưu điểm của nó lại rất quan trọng Vì vậy, cần đưa ra một CTDL khác có đặc tính giống CCBHT nhưng ổn định
Trang 255.2 Cây nhị phân
5 2 3 Cây nhị phân cân bằng
Cây AVL (Adelson – Velskii – Landiis)
Định nghĩa: Cây nhị phân tìm kiếm cân bằng là cây mà
tại mỗi nút của nóạ độ caoộ của cây con tráiy và của cây conyphải chênh lệch không quá một
Cây AVL
Cây nhị phân tìm kiếm cân bằng AVL
Trang 265.2 Cây nhị phân
5 2 3 Cây nhị phân cân bằng
Cây AVL (Adelson – Velskii – Landiis)
Trang 275.2 Cây nhị phân
5 2 3 Cây nhị phân cân bằng
Cây AVL (Adelson – Velskii – Landiis)
Khai báo:
typedef Node *pNode;
typedef Node *pNode;
struct AVLTree
{
pNode root;
};
Trang 285.2 Cây nhị phân
5 2 3 Cây nhị phân cân bằng
Cây AVL (Adelson – Velskii – Landiis)
Các trường hợp mất cân bằng:
• Trường hợp 1: g ợp cây T lệch về bên trái (có 3 khả năng) y ệ ( g)
Trang 295.2 Cây nhị phân
5 2 3 Cây nhị phân cân bằng
Cây AVL (Adelson – Velskii – Landiis)
Các trường hợp mất cân bằng:
• Trường hợp 2: g ợp cây T lệch về bên phải (có 3 khả năng) y ệ p ( g)
Trang 305.2 Cây nhị phân
5 2 3 Cây nhị phân cân bằng
Cây AVL (Adelson – Velskii – Landiis)
Các trường hợp mất cân bằng:
• Hướng giải quyết g g q y của 2 trường hợp là tương tự nhau nên ta g ợp g ự
chỉ giải quyết Trường hợp 1
Trang 315.2 Cây nhị phân
5 2 3 Cây nhị phân cân bằng
Cây AVL (Adelson – Velskii – Landiis)
Các trường hợp mất cân bằng:
Trang 325.2 Cây nhị phân
5 2 3 Cây nhị phân cân bằng
Cây AVL (Adelson – Velskii – Landiis)
Các trường hợp mất cân bằng: