저는 처음부터 KdTree를 구현하려고했습니다. 성공적으로 add-를 구현하고, 가장 가까운 neighbour-를 찾고, range 메소드에서 노드를 찾는다. 이제 노드 제거에 박혀있다.KdTree 노드 제거
위키 백과에 설명 된 방법은 모호하고 오히려 쓸모가 없습니다. 대신 시작 지점으로 these slides을 사용하고 있습니다. 그러나, 슬라이드 (13)의 제거 방법에 대한 설명이 나를 혼란 :
KDNode remove (KDNode t , Point p , int cd) {
if (t == null) return null;
else if (p.cd < t.data) t.left = remove (t.left , p , cd +1);
else if (p.cd > t.data) t.right = remove (t.right , p , cd +1);
else {
if (t.right == null && t.left == null) return null ;
if (t.right != null)
t.data = findmin(t.right , cd , cd +1);
else {
t.data = findmin (t.left , cd , cd +1);
t.left = null;
}
t.right = remove (t.right , t . data , cd +1);
return t ;
}}
null
및 t.right with remove(t.right, ...)
로 모두 교체 t.left
가 이해되지 않는다.
이 정보가 정확하며이 방법에 문제가 있습니까? 이 슬라이드에서 설명한 방법의 반대쪽에서 오른쪽 대신에 왼쪽에 같은 노드를 놓습니다. 이 방법은 여전히 유효합니까?
노드를 왼쪽에서 최소값이 아닌 최소값으로 오른쪽에서 최대 값을 가질 수 있기 때문에 나는 그 값에 동의하지 않습니다. –