ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 알고리즘...80
    일지 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]
    --------------------

     

    댓글

Designed by Tistory.