Bài giảng Cấu trúc dữ liệu và giải thuật: Cây AVL - Phan Mạnh Hiển (2020)

10 17 0
Bài giảng Cấu trúc dữ liệu và giải thuật: Cây AVL - Phan Mạnh Hiển (2020)

Đang tải... (xem toàn văn)

Thông tin tài liệu

− Chỉ những nút trên đường đi từ điểm chèn ngược về gốc có thể bị ảnh hưởng (chiều cao thay đổi) • Chỉ cần tái cân bằng dùng phép xoay tại nút sâu nhất. có điều kiện cân bằng bị vi phạ[r]

(1)

Cây AVL

Nguyễn Mạnh Hiển

(2)

Mở đầu

• Khi xây dựng nhị phân tìm kiếm, ta muốn có kiểu hơn?

• Ví dụ: dựng từ dãy {3, 5, 8, 20, 18, 13, 22}

3 18 13 20 22 13

3 8

20

(3)

Mở đầu (tiếp)

• Ta muốn nhị phân tìm kiếm cân đối: − có độ sâu = log N,

− cho phép chèn xóa với thời gian chạy O(log N) trường hợp

(4)

Cây AVL (Adelson-Velskii & Landis)

• Cây AVL nhị phân tìm kiếm thỏa mãn điều

kiện cân bằng:

− với nút X, chiều cao hai trái phải X sai khác không

• Quy ước rỗng có chiều cao -1

8

3

18

13 20

(5)(6)

Chèn xóa AVL

• Thực chèn/xóa nhị phân tìm kiếm thơng thường

• Sau chèn/xóa, điều kiện cân bị vi phạm:

− Sửa phép xoay

(7)

Ví dụ phép chèn

Chèn làm điều kiện cân bị vi phạm nút

(8)

Vi phạm điều kiện cân

• Nếu điều kiện cân bị vi phạm: − Những nút cần xoay?

− Chỉ nút đường từ điểm chèn ngược gốc bị ảnh hưởng (chiều cao thay đổi) • Chỉ cần tái cân dùng phép xoay nút sâu

(9)

Các trường hợp vi phạm

• Giả sử nút k nơi xảy vi phạm Có trường hợp: trái-trái: chèn vào trái trái k trái-phải: chèn vào phải trái k phải-trái: chèn vào trái phải k phải-phải: chèn vào phải phải k • Hai trường hợp (chèn ngoài) tương tự nhau:

− Phép xoay đơn để tái cân

• Hai trường hợp (chèn trong) tương tự nhau:

(10)

Kiểu liệu nút

struct AvlNode { T elem;

AvlNode * left; AvlNode * right;

int height; // chiều cao nút

AvlNode(T e, AvlNode * l, AvlNode * r, int h) { elem = e;

left = l; right = r; height = h; }

};

// Hàm trả chiều cao nút int height(AvlNode * t) {

Ngày đăng: 11/03/2021, 09:45

Tài liệu cùng người dùng

Tài liệu liên quan