이진 검색 트리에서 노드를 제거하는 기능을 구현 중입니다. 함수의 프로토 타입이 설정되어 있으며 변경할 수 없습니다. 학교 과제 임. 내 코드 : 나는 삭제하고 노드에 연결된 지점이없는 경우이진 검색 트리 노드 삭제
typedef struct tBSTNode {
char Key;
struct tBSTNode * LPtr;
struct tBSTNode * RPtr;
} *tBSTNodePtr;
void BSTDelete (tBSTNodePtr *RootPtr, char K) {
tBSTNodePtr *tmp;
if (*RootPtr != NULL) {
if (K < (*RootPtr)->Key)
BSTDelete(&(* RootPtr)->LPtr, K);
else if (K > (*RootPtr)->Key)
BSTDelete(&(* RootPtr)->RPtr, K);
else {
if ((* RootPtr)->LPtr == NULL) {
/* there is only right branch or none*/
tmp = RootPtr;
*RootPtr = (* RootPtr)->RPtr;
free(*tmp);
*tmp = NULL;
}
else if ((* RootPtr)->RPtr == NULL) {
/* there is only left branch or none*/
tmp = RootPtr;
*RootPtr = (* RootPtr)->LPtr;
free(*tmp);
*tmp = NULL;
}
else
/* there are both branches, but that is for another topic*/
}
}
}
이 코드는 단지의 경우 제대로 작동합니다. * tmp = NULL에 문제가있을 것으로 예상합니다. 라인과 다른 지점에 내 주소를 잃고 있지만 다른 라인에이 라인이 포함되어 있지 않으면 나는 SEGFAULT를 얻고 있으며 그 이유를 알아 내려고합니다.
는편집 :
확인은, 지금은 실수가 어디에 있는지 알고있다. 그것은 어리석은 실수이다, 나는 사용해야했다 tBSTNodePtr tmp; 대신 tBSTNodePtr * tmp;는
불행히도 나는 insert()와 같은 다른 함수를 호출 할 수 없으므로 표시된 코드 만 사용해야합니다. – skornos