밑에분도 질문했는데 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의 연결관계를 재설정해주는 부분이 필요한것 같습니다.