-
형제 노드로 넘기는 처리
기존 코드에서 왼쪽 형제로 키를 넘길 때 기존 노드에서 가장 작은 값을 가져오는데 이때 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] --------------------