Thêm một nút

Một phần của tài liệu Cấu trúc dữ liệu trong C ++ - Chương 10 (Trang 40 - 41)

9.5.2.1. Dẫn nhập

Chúng ta hãy theo dõi sự lớn lên của cây AVL trong hình 9.17 qua việc thêm một số phần tử.

Quá trình thêm ở hình 9.17 được tiến hành chính xác theo cùng một cách với quá trình thêm vào cây nhị phân tìm kiếm thông thường, ngoại trừ việc cập nhật lại thông số cân bằng. Tuy nhiên, chúng ta lưu ý rằng các thông số cân bằng chỉ có thể được xác định sau khi việc thêm vào đã được thực hiện. Khi v được thêm vào theo hình 9.17, thông số cân bằng trong gốc k thay đổi, nhưng nó không thay đổi khi p được thêm kế sau đó. Cả v và p đều được thêm vào cây con phải t của nút gốc, và chỉ sau khi việc thêm vào hoàn tất, thông số cân bằng tại nút gốc k mới có thể được xác định.

Chúng ta có thể thêm một nút mới vào một cây AVL bằng cách như sau. Trước hết theo đúng giải thuật thêm vào một cây nhị phân tìm kiếm bình thường : so sánh khóa của nút mới với khóa của nút gốc, và thêm nút mới vào cây con trái hoặc cây con phải thích hợp.

Trong quá trình lần tìm xuống các nhánh, nếu khóa cần thêm vào chưa có thì việc thêm nút mới cuối cùng sẽ được thực hiện tại một cây con rỗng. Từ cây con rỗng trở thành cây con có một nút, chiều cao nó đã tăng lên. Điều này có thể ảnh hưởng đến các nút trên đường đi từ nút cha của nó trở lên gốc. Vì vậy trong quá trình duyệt cây đi xuống để tìm vị trí thêm vào, chúng ta cần lưu lại vết để có thể lần ngược về để xử lý. Chúng ta có thể dùng ngăn xếp, hoặc đơn giản hơn là dùng hàm đệ quy.

Tham biến taller của hàm đệ quy được gán bằng true tại lần đệ quy cuối cùng, đó chính là lúc nút mới được tạo ra tại một cây con rỗng làm cho nó tăng chiều cao như đã nói ở trên. Những việc sau đây cần được thực hiện tại mỗi nút nằm trên đường đi từ nút cha của nút vừa được tạo ra cho đến nút gốc của cây. Trong khi mà tham biến taller trả lên còn là true, việc giải quyết cứ phải tiếp tục cho đến khi có một nút nhận được trị trả về của tham biến này là false. Một khi có một cây con nào đó báo lên rằng chiều cao của nó không bị tăng lên thì các nút trên của nó sẽ không bị ảnh hưởng gì, giải thuật kết thúc. Ngược lại, gọi nút đang được xử lý trong hàm đệ quy là sub_root. Sau khi gọi đệ quy xuống cây con và nhận được thông báo trả về rằng chiều cao cây con có tăng (taller == true), cần xét các trường hợp sau:

Một phần của tài liệu Cấu trúc dữ liệu trong C ++ - Chương 10 (Trang 40 - 41)

Tải bản đầy đủ (PDF)

(54 trang)