이진 트리 함수에서 제거를 쓰려고합니다. 나는 잃어 버렸어 그래서 제거하려고하는 값이 BST의 루트에있는 경우로 시작하여 케이스별로 처리하려고합니다. 내 함수를 테스트하기 위해 먼저 트리의 모든 내용을 인쇄하는 printcontents() 함수를 호출하고 나서 remove (8) [8은 현재 루트에있는 값임)를 호출 한 다음 printcontents () 다시. 내가하고있는 방식은 루트를 트리의 왼쪽에있는 "가장 오른쪽"값으로 바꾸는 것입니다. 두 번째로 printcontents를 호출하면 새로운 루트 값을 올바르게 인쇄하지만 내용을 계속 인쇄하고 그 값이 있던 지점에 도달하면 임의의 긴 숫자 "-572 ......"가됩니다. (비록 그 숫자가 중요하지 않다고 생각 하긴하지만) 내 프로그램이 충돌한다. 내 뿌리의 가치가 대체되고있는 것을 볼 수 있지만 나중에 어떻게 될까요 ?? 그것은 분명히 불완전이진 트리에서 제거
void BinarySearchTree::remove(int value) {
Node* tmp = head;
Node* tmp2 = head;
if (head->data == value && head->left != NULL) {
tmp=tmp->left;
while (tmp->right != NULL) {
tmp=tmp->right;
}
while (tmp2->right->right != NULL) {
tmp2=tmp2->right;
}
if (tmp->left == NULL) {
head->data = tmp->data;
tmp2->right = NULL;
delete tmp;
}
if (tmp->left != NULL) {
head->data = tmp->data;
tmp2->right = tmp->left;
delete tmp;
}
}
,하지만 난 단지 루트를 제거하고 왼쪽에서 가장 오른쪽에있는 값으로 대체되는 경우를 처리로 테스트 해요 :
여기 내 제거 기능입니다 나무 (거기에있는 왼쪽면이 있다고 가정), 그리고 논리적으로 그것이 작동해야하므로, 아마도 내가 "tmp 삭제"일이 잘못 될 것 같은 느낌. 내 전체 프로그램 게시가 필요한지 여부는 모르지만 그렇다면 알려주세요.
너무 심하게 무시당했습니다. – FrostyStraw