일지
알고리즘...80
niamdank
2021. 11. 3. 01:49
형제 노드로 넘기는 처리
기존 코드에서 왼쪽 형제로 키를 넘길 때 기존 노드에서 가장 작은 값을 가져오는데 이때 next를 nullptr로 처리해주지 않아 적절하게 완료되지 않았었다.
노드를 인출할 때 완전히 연결을 끊어줬다.
BTreeNode
/// <summary>
/// 가장 작은 키를 노드에서 떼어내 반환한다.
/// </summary>
/// <returns>가장 작은 키</returns>
BTreeNodeKey* BTreeNode::GetSmallestKey()
{
BTreeNodeKey* key{ nullptr };
if (keyRoot != nullptr)
{
key = keyRoot;
keyRoot = keyRoot->next;
keyRoot->prev = nullptr;
key->next = nullptr;
}
size--;
return key;
}
이제 삽입은 정상적으로 동작하는 게 확인되었다. 그러나 삭제 처리는 최초 삽입 처리와 동일하게 무한 루프에 빠져있다. 적절하게 수정해서 동작하도록 만들어야 할 것 같다.
실행결과
--------------------
[10]
--------------------
--------------------
[5, 10]
--------------------
--------------------
[5, 10, 20]
--------------------
--------------------
[5]
[3][10, 20]
--------------------
--------------------
[5]
[3][7, 10, 20]
--------------------
--------------------
[7]
[3, 5][10, 15, 20]
--------------------
--------------------
[10]
[3, 5, 7][15, 20, 25]
--------------------
--------------------
[3, 10]
[1][5, 7][15, 20, 25]
--------------------
--------------------
[3, 10]
[1][4, 5, 7][15, 20, 25]
--------------------