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

한빛미디어

뇌를 자극하는 알고리즘

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

밑에분도 질문했는데 2진탐색트리 BST_RemoveNode() 함수

2010-03-11

|

by believeornot

3065

Removed = Tree;
...
/* 양쪽 다 있는 경우 */
BSTNode* MinNode = BST_SearchMinNode( Tree->Right );
MinNode = BST_RemoveNode( Tree, NULL, MinNode->Data );
Tree->Data = MinNode->Data;

====

TargetNode를 Root로 보고 우측트리서 MinNode를 찾고
MinNode는 외자식or무자식노드니까 재귀호출해서 연결해제하고(메모리해제 안된상태)
TargetNode에 MinNode의 Data를 복사하고
최종적으로 메모리해제를 위해서 Removed 반환을 하고

그럼 저기서
Removed = BST_RemoveNode( Tree, NULL, MinNode->Data );
아닌가요?
--------------------

실제로 예제에서 22나 424(쌍자식노드) 제거하면 에러납니다.

MinNode를 Removed로 돌리고 Target에 MinNode의 값을 복사하거나

직관적으로 보기위해서 Target을 Removed로 그대로 사용하기위해서는
successor가 될 MinNode의 연결관계를 재설정해주는 부분이 필요한것 같습니다.
댓글 입력