메뉴 바로가기 검색 및 카테고리 바로가기

한빛미디어

뇌를 자극하는 알고리즘

뇌를 자극하는 알고리즘 질의응답 게시판입니다.

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;  를 추가해야 되지 않을까요??

이렇게 하지 않으면 최소값 노드가 메모리 해제되지 않아서
메모리 누수가 일어날 것 같은데요..

궁금하네요.. 답변 부탁드립니다 ^^;
댓글 입력