2014-09-26 3 views
0

다음 2-3-4 트리에서 15를 삭제하려고합니다. 나는 단순히 17을 움직이는 것을 생각했지만, 그것이 완전해야하기 때문에 그것이 옳은지 나는 모른다. enter image description here2-3-4 트리에서 내부 노드 삭제

가 어떻게 2-3-4 트리를 삭제 한 후 다음과 같이 표시됩니다 다음 트리에서

삭제 (15)? 나는이 경우 단순히 17 위로 움직이는 것이 올바르지 않다고 가정한다. 그러나 나는 확실히 모른다.

답변

0

는 2 3 4 트리에서 내부 valuee을 삭제하려면 중복 6.

이 있기 때문에 당신이 나무는 유효한 2 3 4 트리하지 않습니다, 당신은 단순히 값을 대체는 그 다음에 삭제하기 가장 큰 항목 인 순서 후속으로 17이됩니다. 이렇게하면 삭제 문제를 줄이고 리프 노드에서 값을 삭제할 수 있습니다. 그래서 문제는 리프 노드 값을 어떻게 삭제합니까?

2 3 4 트리의 리프에서 삭제할 때 노드가 3- 노드 또는 4- 노드이면 삭제하면됩니다. 노드가 2- 노드이면 노드가 비어 있습니다. 이를 언더 플로라고합니다. 이 문제를 해결하려면 3 노드 또는 4 노드로 발생한 모든 2 노드를 변환해야합니다. 3 또는 4 노드 인 인접 형제가 있는지 또는 모두 2 노드인지 여부에 따라 처리해야하는 세 가지 경우가 있습니다. 이것은 아래의 링크에서 설명됩니다.

2 3 4 트리를 구현하는 소스 코드 (C++ 11에서) :

http://cplusplus.kurttest.com/notes/tree234.html