일지
알고리즘...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)에 대해 오버플로우 처리 진행
}
}
}
이제 이후에 오버플로우에 대한 처리를 진행해야 하는데 이 부분을 어떻게 처리해야 하는지가 되게 애매하게 느껴진다.
이 부분은 구글링을 해 봐야 할 것 같다.