Việc chèn nút N vào cây do T trỏ tới được phát biểu phi hình thức như sau: Kiểm tra xem N và T có thống nhất các trường XVAL và YVAL hay không. Nếu thống nhất thì chỉ việc viết đè nút T và kết thúc. Nếu không hãy rẽ trái nếu N.XVAL<T.XVAL hoặc rẽ phải trong trường hợp ngược lại. Giả sử P là nút con ta đang khảo sát. Nếu N và P thống nhất các trường XVAL và YVAL thì chỉ cần viết đè P và kết thúc, nếu không thì rẽ trái khi N.YVAL<P.YVAL hoặc rẽ phải trong trường hợp ngược lại. Lặp thủ tục này, hãy rẽ nhánh theo XVAL khi ta đang ở mức chẵn trong cây, và theo YVAL khi ta đang ở mức lẻ.
Hình 2.2: Lưới bản đồ dựng cây
Thí dụ trên hình 2.2 là lưới bản đồ. Gốc (0, 0) ở góc dưới trái của lưới. Giả sử ta phải xây dựng cây 2-d, trường INFO chỉ chứa tên địa điểm.
Danh sách các địa điểm như sau đây:
Xã (XVAL, YVAL) Nam Cường (19, 45) Địa Linh (40, 50) Quảng Khê (38, 38) Yến Dương (54, 40) Quảng Bạch (12, 12)
Khởi động cây là rỗng. Hình 2.3 là trình tự chèn vào cây. Các cây này được xây dựng như sau đây:
Hình 2.3: Trình tự chèn vào cây 2-d
1. Khi chèn Nam Cường vào cây có một nút với INFO=Nam Cường, XVAL=19, YVAL=45. Nút này biểu diễn toàn bộ vùng bản đồ. Tổng quát, mỗi nút
N biểu diễn vùng Reg(N). Các trường XVAL và YVAL của nút N xác định điểm trong Reg(N). Điểm (N.XVAL, N.YVAL) chia Reg(N) thành 2 phần bằng cách vẽ đường thẳng đứng qua điểm trong vùng (nếu nút ở mức chẵn) hay vẽ đường nằm ngang qua điểm trong vùng (nếu nút ở mức lẻ).
2. Khi chèn Địa Linh, phải so sánh các trường XVAL của nó với trường này của Nam Cường. Chúng ta rẽ phải vì tọa độ x (40) của Địa Linh lớn hơn của Nam Cường (19). Kết quả trên hình 2.3b. Nam Cường chia đôi vùng bằng đường thẳng đứng (đường a của hình 2.4), mọi điểm nằm bên phải có tọa độ x lớn hơn hay bằng 19, bên trái có tọa độ nhỏ hơn 19. Địa Linh biểu diễn vùng bên phải của đường thẳng đứng a của hình 2.4
3. Khi chèn Quảng Khê, trước hết ta so sánh trường XVAL của Quảng Khê
và Nam Cường. Trường này của Quảng Khê là 38, của Nam Cường là 19, vậy ta phải rẽ phải. Sau đó so sánh trường YVAL của Quảng Khê với YVAL của Địa Linh.
YVAL của Quảng Khê là 38, của Địa Linh là 50, do vậy phải rẽ trái. Kết quả trên hình 2.3c. Địa Linh chia đôi vùng bằng đường nằm ngang b của hình 2.4. Vùng
phía trên đường thẳng có tọa độ x lớn hơn hay bằng 19, tọa độ y lớn hơn hay bằng 50. Vùng phía dưới đường thẳng có toạ độ x nhỏ hơn 19 và tọa độ y nhỏ hơn 50.
Hình 2.4: Phép chèn cây k-d trên bản đồ
4. Khi chèn Yến Dương, trước hết phải so sánh XVAL của Yến Dương và
Nam Cường. Giá trị XVAL của Yến Dương là 54, còn của Nam Cường là 19, vậy phải rẽ phải. Sau đó so sánh YVAL của Yến Dương (40) và Địa Linh (50), vậy phải rẽ trái. Tiếp tục so sánh XVAL của Yến Dương (54) và Quảng Khê (38), vậy phải rẽ phải (hình 2.3d).
5. Cuối cùng, khi chèn xã Quảng Bạch, ta phải so sánh XVAL của Quảng Bạch và Nam Cường. Ta rẽ trái vì tọa độ x của Quảng Bạch nhỏ hơn của Nam Cường. Kết quả được mô tả trên hình 2.3d và 2.3e.
Trong trường hợp tồi nhất thì độ cao của cây 2-d với k nút là (k-1), việc tìm kiếm nút cho trước sẽ mất O(k) lần.
Thuật toán chèn vào cây k-d: [2]
KDNode insert(Point x, KDNode t, int cd) {
If (t == null)
Else if (x == t.data) Error duplicate point Else if (x[cd] < t.data[cd]) t.left = insert (x, t.left, cd + 1) else
t.right = insert (x, t.right, cd + 1) return t
}