Xóa trong cây 2-d

Một phần của tài liệu (LUẬN văn THẠC sĩ) các cấu trúc dữ liệu trong hệ thống thông tin địa lý (Trang 30 - 31)

Công việc phức tạp nhất với cây 2-d là huỷ bỏ điểm khỏi cây. Giả sử T là cây 2 chiều, điểm sẽ huỷ bỏ có tọa độ (x, y). Bước thứ nhất của việc huỷ bỏ là tìm ra nút N trong T sao cho N.XVAL=x và N.YVAL=y. Nếu N là nút lá thì huỷ N là dễ dàng, chỉ việc đặt NIL cho LLINK, RLINK trong nút cha N, giải phóng vùng nhớ N. Nếu N là nút trong cây thì phức tạp hơn. Trong trường hợp này, cây con có gốc tại N.LLINK (đặt tên là Tl) hay tại N.RLINK (đặt tên là Tr) là không rỗng. Cái ta muốn bây giờ là tìm nút R từ Tl hay Tr có thể thay thế nút N và có thể lần lượt được huỷ bỏ khỏi cây con. Như vậy các bước của thuật toán huỷ bỏ nút N bên trong cây sẽ là:

Bước 1: Tìm nút ứng viên thay thế R trong Ti với i {l, r}.

Bước 2: Thay thế mọi trường không có liên kết của N bởi các trường của R. Bước 3: Huỷ bỏ đệ qui R khỏi Ti.

Đệ qui trên đây có điểm dừng vì Ti với i {l, r} có độ cao nhỏ hơn cây T. Bước phức tạp nhất trong thuật toán trên là tìm ra nút ứng viên thay thế. Nút R muốn thay thế phải có quan hệ không gian với mọi nút P trong Tl và Tr sao cho N dẫn tới P. Có nghĩa rằng, nếu P ở phía tây nam N thì P phải ở tây nam R, nếu P ở tây bắc N thì P phải ở tây bắc R, ... Như vậy, nút mong muốn thay thế R phải thoả các tính chất sau:

2. Mọi nút M trong Tr thoả M.XVAL ≥R.XVAL nếu level(N) là chẵn và M.YVAL ≥R.YVAL nếu level(N) là lẻ.

Nếu Tr không rỗng và level(N) là chẵn, thì bất kỳ nút nào trong Tr mà có trường XVAL nhỏ nhất thì là nút ứng viên thay thế. Thí dụ, trong hình 2.3e, nếu ta lấy N là nút chứa Nam Cường, thì nút ứng viên thay thế từ cây con bên phải là nút liên kết với Quảng Khê vì nó có tọa độ x nhỏ nhất trong các nút của cây con phía phải Nam Cường. Mặt khác, nếu Tr không rỗng và level(N) là lẻ thì bất kỳ nút nào

trong Tr mà có trường YVAL nhỏ nhất thì là nút ứng viên thay thế.

Tổng quát thì việc tìm kiếm nút thay thế từ cây con bên trái chỉ có thể thắng lợi dưới một số điều kiện nhất định. Nếu level(N) là chẵn thì nút thay thế phù hợp trong Tl là nút bất kỳ nếu thoả mãn trường XVAL của nó có giá trị lớn nhất. Tương tự nếu level(N) là lẻ thì ta có thể sử dụng nút bất kỳ trong Tl mà có trường YVAL lớn nhất để làm nút thay thế.

Vấn đề xảy ra là có thể có nhiều nút trong Tl cùng có XVAL (hay YVAL) lớn nhất, trong trường hợp này điều kiện thứ hai trong định nghĩa cây 2-d có thể bị vi phạm bởi bước 3 vừa mô tả trên. Tổng quát thì, nếu N là nút trong và ta muốn huỷ bỏ N khỏi T thì tìm thay thế từ cây con phải vì việc tìm ứng viên thay thế trong cây trái là không thể.

Cái gì xảy ra nếu N có cây phải rỗng (N.RLINK=NIL). Trong trường hợp này ta có thể chọn nút thay thế R từ Tl có giá trị x nhỏ nhất trong Tl (nếu level(N) là chẵn) hay có giá trị y nhỏ nhất trong Tl (nếu level(N) là lẻ). Sau đó ta sửa đổi bước 2 trong thuật toán trên đây như sau:

Bước 2 (sửa đổi): Thay thế toàn bộ các trường không có liên kết của nút N bằng nút R. Đặt N.RLINK=N.LLINK và N.LLINK=NIL.

Một phần của tài liệu (LUẬN văn THẠC sĩ) các cấu trúc dữ liệu trong hệ thống thông tin địa lý (Trang 30 - 31)

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

(80 trang)