// Method ins translated from 352.ins.c of Gonnet & Baeza-Yates public static KDNode ins(HPoint key, TYPE val, KDNode t, int lev, int K) { if (t == null) { t = new KDNode(key, val); } else if (key.equals(t.k)) { // "re-insert" if (t.deleted) { t.deleted = false; t.v = val; } else { throw (new KeyDuplicateException()); } } else if (key.coord[lev] > t.k.coord[lev]) { t.right = ins(key, val, t.right, (lev + 1) % K, K); } else { t.left = ins(key, val, t.left, (lev + 1) % K, K); } return(t); }
// Method srch translated from 352.srch.c of Gonnet & Baeza-Yates public static KDNode srch(HPoint key, KDNode t, int K) { for (int lev = 0; t != null; lev = (lev + 1) % K) { if (!t.deleted && key.equals(t.k)) { return(t); } else if (key.coord[lev] > t.k.coord[lev]) { t = t.right; } else { t = t.left; } } return(null); }