Hoạt động phân tách có thể được thực hiện cho các cây AVL với độ phức tạp không? Tôi quan tâm đến các liên kết đến bài viết hoặc bất kỳ thông tin cụ thể về chủ đề này.
Thao tác phân chia chia cây AVL thành hai cây AVL dẫn xuất, dựa trên khóa. Một trong những cây dẫn xuất phải chứa tất cả các đỉnh trong đó tất cả các khóa nhỏ hơn khóa gốc và phần còn lại là khóa thứ hai.
Tôi biết điều này có thể được thực hiện trong thời gian . Đây là một liên kết để thực hiện với độ phức tạp : https://code.google.com.vn/p/elf-balANCE-avl-tree/
Tôi cũng biết cách hợp nhất hai cây AVL, sao cho các khóa của một cây đều nhỏ hơn các khóa của cây kia, trong thời gian . Đây là một triển khai với độ phức tạp O ( log n ) :
def Merge(l, r) {
if (!l || !r)
return l ? l : r;
if (l->h <= r->h)
r->l = Merge(l, r->l), Rebalance(r);
else
l->r = Merge(l->r, r), Rebalance(l);
}