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, yc) 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, ta nhớ lại rằ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.6d.
1. Nút có nhãn Nam Cường 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 Địa Linh biểu diễn vùng chứa mọi điểm (x, y) với x≥19; nó có thể được thu nhận bởi biểu thức {(x, y) | x≥19}.
3. Nút có nhãn Quảng Khê biểu diễn vùng chứa mọi điểm (x, y) với x≥19 và y<50; nó có thể được thu nhận bởi biểu thức {(x, y) | x≥19&y<50}.
4. Nút có nhãn Yến Dương biểu diễn vùng chứa mọi điểm (x, y) với x≥38 và y<50; nó có thể được thu nhận bởi biểu thức {(x, y) | x≥38&y<50}.
5. Cuối cùng, nút nhãn Quảng Bạch 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 x≥c1.
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 y≥c3. 4. YUB: Ràng buộc này biểu diễn cận trên của y và 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;
Khi xen nút ta 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.YLB=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 đồ Huyện Ba Bể, tỉnh Bắc Kạn (hình 2.5). 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 Quảng Khê và Địa Linh sẽ 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 Nam Cường có trong vòng tròn hay không? Câu trả lời là nó không nằm trong.
Tiếp tục xem xét hai cành của Nam Cường, 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 ta sẽ không xem xét cành này. Mặt khác cành phía phải của Nam Cường biểu diễn mọi điểm (x, y) thoả x≥19, chắc chắn nó cắt vòng tròn.
Kiểm tra xem cành bên phải (Địa Linh) có trong vòng tròn? Câu trả lời là có, vậy ta cho lại mã của nó. Sau đó hãy khảo sát cành của Địa Linh. Vùng biểu diễn bởi tập điểm (x, y) thoả x≥19 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 ta trả lại cành của nó (Quảng Khê). Hãy xem xét con của Quảng Khê (Yến Dương). Vùng này được biểu diễn bởi tập điểm (x, y) thoả x≥38 và y<50, và vùng này cắt đường tròn. Vậy cần kiểm tra xem Yến Dương trong vòng tròn. Câu trả lời là không, do vậy có thể dừng tại đây.