ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 알고리즘...66
    일지 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)에 대해 오버플로우 처리 진행
    		}
    	}
    }

     

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

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

     

    댓글

Designed by Tistory.