@Override public void kNearestNeighbour(Collection<T> result, Coordinate query, int k) { final Stack<KDNode<T>> stack = walkdown(query); final PriorityQueue<NNState> state = new PriorityQueue<NNState>(k); final NNState initialState = new NNState(); initialState.best = stack.peek()._point; initialState.bestDist = distance(query, initialState.best); state.add(initialState); while (!stack.isEmpty()) { final KDNode<T> current = stack.pop(); checkSubtreeK(current, query, state, k); } @SuppressWarnings("unchecked") final NNState[] stateList = state.toArray((NNState[]) Array.newInstance(NNState.class, state.size())); Arrays.sort(stateList); for (int i = stateList.length - 1; i >= 0; i--) result.add(stateList[i].best); }
@Override public void kNearestNeighbour(Collection<T> result, Coordinate query, int k) { final Stack<KDNode<T>> stack = walkdown(query); final PriorityQueue<NNState> state = new PriorityQueue<NNState>(k); final NNState initialState = new NNState(); initialState.best = stack.peek()._point; initialState.bestDist = distance(query, initialState.best); state.add(initialState); while (!stack.isEmpty()) { final KDNode<T> current = stack.pop(); checkSubtreeK(current, query, state, k); } @SuppressWarnings("unchecked") final NNState[] stateList = state.toArray((NNState[]) Array.newInstance(NNState.class, state.size())); Arrays.sort(stateList); for (int i = stateList.length - 1; i >= 0; i--) result.add(stateList[i].best); }
checkSubtreeK(node._right, query, state, k); else checkSubtreeK(node._left, query, state, k); } else { checkSubtreeK(node._left, query, state, k); checkSubtreeK(node._right, query, state, k);
checkSubtreeK(node._right, query, state, k); else checkSubtreeK(node._left, query, state, k); } else { checkSubtreeK(node._left, query, state, k); checkSubtreeK(node._right, query, state, k);