Truy vấn khoảng trên cây 2-d có tên T là truy vấn theo chỉ định điểm (xc,xc) và khoảng r. Kết quả cho lại là tập điểm (x,y) trong cây T sao cho (x,y) nằm trong khoảng r của (xc,yc). Nói cách khác khoảng truy vấn xác định vòng tròn bán kính r có tâm (xc,yc) và tìm mọi điểm trong cây 2-d nằm trong vòng tròn.
Khi xử lý truy vấn khoảng, mỗi nút N trong cây 2-d biểu diễn vùng RN, nếu vòng tròn và vùng RN không giao nhau thì không tìm thấy điểm nào trong cây con có gốc là nút N. Hãy quan sát các vùng trong hình 2.5d.
1. Nút có nhãn Banja Luka biểu diễn vùng chứa các điểm (x,y) của các số thực.
2. Nút có nhãn Derventa biểu diễn vùng chứa mọi điểm (x,y) với x19; nó có thể đƣợc thu nhận bởi biểu thức {(x,y) x19}.
3. Nút có nhãn Teslic biểu diễn vùng chứa mọi điểm (x,y) với x19 và y <50; nó có thể đƣợc thu nhận bởi biểu thức {(x,y)x19&y<50}.
4. Nút có nhãn Tuzla biểu diễn vùng chứa mọi điểm (x,y) với x38 và y<50; nó có thể đƣợc thu nhận bởi biểu thức {(x,y)x38&y<50}.
5. Cuối cùng, nút nhãn Sinj biểu diễn vùng chứa mọi điểm (x,y) với x<19. Tổng quát thì mỗi nút N có nhiều nhất 4 ràng buộc kết hợp biểu diễn kết nối các vùng:
1. XLB: Ràng buộc này biểu diễn cận dƣới (Lower Bound) của x và có khuôn dạng xc1
2. XUB: Ràng buộc này biểu diễn cận trên (Upper Bound) của x và có khuôn dạng x < c2.
3. YLB: Ràng buộc này biểu diễn cận dƣới của y và có khuôn dạng yc3 4. YUB: Ràng buộc này biểu diễn cận trên của y và nó có khuôn dạng y<c4. Có thể mở rộng định nghĩa kiểu dữ liệu nodetype thành newnodetype bằng cách gộp các trƣờng vừa mô tả trên nhƣ sau:
newnodetype = record INFO: infotype; XVAL,YVAL: real;
XLB,XUB,YLB,YUB: real {+,-}; LLINK, RLINK: newnodetype; end
Khi chèn nút khi đó chỉ phải làm nhƣ sau đây:
1. Với gốc cây: đặt - vào XLB và YLB, đặt + vào XUB và YUB 2. Nếu nút N có nút P là cha và mức level(P) là chẵn thì :
N.XLB=P.XLB nếu N=P.LLINK N.XLB=P.XVAL nếu N=P.RLINK N.XUB=P.XVAL nếu N=P.LLINK N.XUB=P.XUB nếu N=P.RLINK N.YB=P.YLB
N.YUB=P.YUB
3. Nếu nút n có nút P là cha và mức level (P) là lẻ thì: N.YLB=P.YLB nếu N=P.LLINK
N.YLB=P.YVAL nếu N=P.RLINK N.YUB=P.YVAL nếu N=P.LLINK N.YUB=P.YUB nếu N=P.RLINK N.XLB=P.XLB
N.XUB=P.XUB
Thí dụ sau đây xem xét truy vấn khoảng trên bản đồ Bosnia (hình 2.6). Cho trƣớc vòng tròn tâm (35, 46) và bán kính 9.5. Câu trả lời là hai điểm Testic và Derventa sẽ hoàn toàn thoả mãn.
Tiến trình truy vấn nhƣ sau. Vùng biểu diễn gốc cây 2-d không cắt vòng tròn, vậy ta kiểm tra xem Banja Luka có trong vòng tròn? Câu trả lời là nó không nằm trong. Tiếp tục xem xét hai cành của Banja Luka, bên trái biểu diễn mọi điểm (x, y) thoả x<19. Vì vùng này không cắt vòng tròn nên sẽ không xem xét tiếp cành này. Mặt khác cành phía phải của Banja Luka biểu diễn mọi điểm (x, y) thoả x19, chắc chắn nó cắt vòng tròn. Kiểm tra xem cành bên phải (Derventa) có trong vòng tròn? Câu trả lời là có, vậy cho lại mã của nó. Sau đó hãy khảo sát cành của Derventa. Vùng biểu diễn bởi tập điểm (x, y) thoả x19 và y<50. Vùng này cắt vòng tròn, vậy phải kiểm tra cành có trong vòng tròn? Câu trả lời là có, vậy phải trả lại cành của nó (Testic). Hãy xem xét con của Testic (Tuzla). Vùng này đƣợc biểu diễn bởi tập điểm (x, y) thoả x38 và y<50, và vùng này cắt đƣờng tròn. Vậy cần kiểm tra xem Tuzla
trong vòng tròn? Câu trả lời là không, do vậy có thể dừng lại tại đây.