일지

알고리즘...66

niamdank 2021. 10. 10. 00:22

B 트리 삽입 함수 구현 진행

삽입 알고리즘 처리 중 재귀적으로 처리해야 하는 부분을 적용했다.

 

BTree::Insert

/// <summary>
/// 주어진 값을 B 트리에 삽입한다.
/// </summary>
/// <param name="data">삽입할 값</param>
void BTree::Insert(int data)
{
	if (Exists(data))
	{
		return;
	}

	Insert(_root, data);
}

/// <summary>
/// 주어진 값을 B 트리에 삽입한다.
/// </summary>
/// <param name="parent">삽입할 노드</param>
/// <param name="data">삽입할 값</param>
void BTree::Insert(BTreeNode* parent, int data)
{
	// 루트가 빈 값이었던 경우
	if (parent == nullptr)
	{
		BTreeNode* node{ _nodeManager.Pop() };
		node->Insert(data);
		_root = node;
	}
	// 노드에 키 삽입 실패한 경우
	else if (!parent->Insert(data))
	{
		BTreeNode* node = parent->GetProperNodeToInsert(data);
		if (node != nullptr)
		{
			Insert(node, data);
		}
		else
		{
			// 기존 노드(parent)에 대해 오버플로우 처리 진행
		}
	}
}

 

이제 이후에 오버플로우에 대한 처리를 진행해야 하는데 이 부분을 어떻게 처리해야 하는지가 되게 애매하게 느껴진다.

이 부분은 구글링을 해 봐야 할 것 같다.