Cấu trúc dữ liệu của cây cân bằng:

Một phần của tài liệu Cây (tree) (Trang 41 - 42)

Để ghi nhận mức độ cân bằng tại mỗi nút gốc cây con chúng ta sử dụng thêm một thành phần Bal trong cấu trúc dữ liệu của mỗi nút. Do vậy, cấu trúc dữ liệu của cây nhị phân tìm kiếm cân bằng tương đối và cây nhị phân tìm kiếm cân bằng hoàn toàn nói riêng và của cây cân bằng nói chung tương tự như cấu trúc dữ liệu của cây nhị phân ngoại trừ trong đó chúng ta đưa thêm thành phần Bal làm chỉ số cân bằng tại mỗi nút như sau:

typedef struct BAL_Node { T Key;

int Bal; // Chỉ số cân bằng tại nút gốc cây con

BAL_Node * BAL_Left; // Vùng liên kết quản lý địa chỉ nút gốc cây con trái BAL_Node * BAL_Right; // Vùng liên kết quản lý địa chỉ nút gốc cây con phải

} BAL_OneNode;

typedef BAL_OneNode * BAL_Type;

Để quản lý các cây nhị phân tìm kiếm cân bằng chúng ta chỉ cần quản lý địa chỉ nút gốc của cây:

BAL_Type BALTree;

Giá trị chỉ số cân bằng Bal tại một nút gốc cây con trong cây cân bằng tương đối bằng hiệu số giữa chiều cao cây con trái và chiều cao cây con phải của nút đó. Giá trị chỉ số cân bằng Bal tại một nút gốc cây con trong cây cân bằng hoàn toàn bằng hiệu số giữa số nút ở cây con trái và số nút ở cây con phải của nút đó.

Như vậy, nếu tại mọi nút trong cây nhị phân mà thỏa mãn điều kiện -1 ≤ Bal ≤ 1 thì cây là cây cân bằng và phạm vi từ –1 đến +1 là phạm vi cho phép của chỉ số cân bằng Bal:

+ Nếu Bal = 0: cây con trái và cây con phải đều nhau

+ Nếu Bal = -1: cây con trái nhỏ hơn (thấp hơn) cây con phải (lệch phải) + Nếu Bal = +1: cây con trái lớn hơn (cao hơn) cây con phải (lệch trái)

5.3.2. Các thao tác

Trong phạm vi của phần này chúng ta xem xét các thao tác trên cây nhị phân tìm kiếm cân bằng tương đối. Các thao tác trên cây cân bằng hoàn toàn sinh viên tự vận dụng tương tự. Do vậy, khi trình bày các thao tác mà nói tới cây cân bằng nghĩa là cây nhị phân tìm kiếm cân bằng và chúng ta cũng chỉ xét cây nhị phân tìm kiếm trong trường hợp không trùng khóa nhận diện.

Trong các thao tác trên cây nhị phân tìm kiếm cân bằng tương đối thì có hai thao tác Thêm một nút vào cây và Hủy một nút khỏi cây là hai thao tác khá phức tạp vì có nguy cơ phá vỡ sự cân bằng của cây, khi đó chúng ta phải thực hiện việc cân bằng lại cây. Các thao tác khác hoàn toàn tương tự như trong cây nhị phân nói chung và cây nhị phân tìm kiếm nói riêng. Do vậy, trong phần này chúng ta chỉ trình bày hai thao tác này mà thôi.

Giáo trình: Cấu Trúc Dữ Liệu và Giải Thuật

Một phần của tài liệu Cây (tree) (Trang 41 - 42)