일지

알고리즘...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]
--------------------