Cây R (R-Trees) là kiểu cấu trúc dữ liệu mới, cấu trúc này có thể đƣợc sử dụng để lƣu trữ các vùng chữ nhật của một hình ảnh hay bản đồ. R-Trees đặc biệt hữu ích trong việc lƣu trữ dữ liệu số lƣợng lớn trên đĩa. Do việc truy cập đĩa thƣờng rất chậm, R-trees cung cấp một cách thuận tiện trong việc cực tiểu hoá số lần truy cập đĩa.
Mỗi R-Trees kết hợp với một thứ tự là một số nguyên K. Mỗi nút R-Trees
không phải là lá bao gồm một tập từ K/2 đến K hình chữ nhật. Bằng trực quan thấy rằng mỗi nút không lá trong R-Trees trừ gốc ít nhất phải là một nửa. Đặc điểm này làm cho R-Trees thích hợp với việc truy vấn đĩa với vì mỗi truy cập đĩa mang lại một trang chứa đựng trong một trang, chiều cao của R-Trees sử dụng để lƣu trữ tập hợp các hình chữ nhật, thƣờng rất nhỏ. Do vậy số lần truy cập đĩa giảm bớt so với các cây mô tả trên.
Một hình chữ nhật hoặc là “thực” hoặc là một hình bao hàm một nhóm hình chữ nhật. Các nút lá bao gồm một hình chữ nhật “thực” trong khi các nút không lá bao gồm các hình chữ nhật nhóm từ một tập các hình chữ nhật. Hình 2.14 chỉ ra cách nhóm các hình chữ nhật nhƣ sau. Nhóm Các chữ nhật G1 R1, R2, R3 G2 R4, R5, R6, R7 G3 R8, R9 Bảng 2.4
Hình 2.14 chỉ ra cây R bậc 4 liên kết với các chữ nhật trên hình 2.14. Bảng 2.4 là kết quả có đƣợc. Cấu trúc của một R-Trees đƣợc định nghĩa nhƣ sau:
rtnodetype = record
Rectl,…, Rectk: Rectangle; P1,…, Pk: rtnodetype; end
Kiểu dữ liệu Rectangle sẽ không đƣợc đề cập ở đây, thực tế có rất nhiều cách để biểu diễn chữ nhật.[17]