6장 BST_RemoveNode()함수에 관해서 질문입니다.
2010-02-12
|
by rurounimk2
2235
안녕하세요~
BSTNode* BST_RemoveNode( BSTNode* Tree,BSTNode* Parent, ElementType Target )
함수에 관한 질문인데요,
"자식이 양쪽 다 있는 경우" 처리 부분에서 약간 궁금한 점이 있어서요..
-----------------------------------------------------------------
else /* 목표 값을 찾은 경우. */
{
Removed = Tree;
/* 잎 노드인 경우 바로 삭제 */
if ( Tree->Left == NULL && Tree->Right == NULL )
{
생략..
}
else
{
/* 자식이 양쪽 다 있는 경우 */
if ( Tree->Left != NULL && Tree->Right != NULL )
{
/* 최소값 노드를 찾아 제거한 뒤 현재의 노드에 위치시킨다. */
BSTNode* MinNode = BST_SearchMinNode( Tree->Right );
MinNode = BST_RemoveNode( Tree, NULL, MinNode->Data );
Tree->Data = MinNode->Data;
}
else
{
/* 자식이 하나만 있는 경우 */
생략..
}
}
}
return Removed;
-----------------------------------------------
마지막에 Removed 에 지울 노드의 주소를 담아서 리턴하는 것 같은데
----------------------------------------------------------
/* 최소값 노드를 찾아 제거한 뒤 현재의 노드에 위치시킨다. */
BSTNode* MinNode = BST_SearchMinNode( Tree->Right );
MinNode = BST_RemoveNode( Tree, NULL, MinNode->Data );
Tree->Data = MinNode->Data;
----------------------------------------------------------
의 밑에
Removed = MinNode; 를 추가해야 되지 않을까요??
이렇게 하지 않으면 최소값 노드가 메모리 해제되지 않아서
메모리 누수가 일어날 것 같은데요..
궁금하네요.. 답변 부탁드립니다 ^^;