내 C 프로그램에서 작동하지 :루트 = NULL 내가 트리에서 노드를 삭제하려면 다음 함수를 만든
void delNode(int key, Node *root) {
if(root->data != key && root->left != NULL) {
delNode(key,root->left);
}
if(root->data != key && root->right != NULL) {
delNode(key,root->right);
}
if(root->data != key && root->left == NULL) {
return;
}
if(root->data != key && root->right == NULL) {
return;
}
if(root->data == key) {
root = NULL;
return;
}
}
나는이 통과
void printInorder(Node *root) {
if(root!=NULL) {
printInorder(root->left);
printf("%d ",root->data);
printInorder(root->right);
}
}
에 대한 다음과 같은 기능 삭제 된 노드가 표시된 경우에도 & 트리를 표시합니다.
PS : 나는 노드를 삭제하지 않습니다 루트
이 우리를보기 -이 : 나는 당신이 방법은 아래를 참조이 함께 시도 해결 한 그 구조와 모든 요소를 만드는 노드). –
모든 경고와 디버그 정보로 컴파일 : [gcc] (http://gcc.gnu.org/)로'gcc -Wall -Wextra -g'. ** 디버거 **'gdb' (그리고'valgrind')를 사용하십시오. fix-my-code 질문은 주제와 관련이 없습니다. –
'root '는 트리의 노드를 가리키는 포인터입니다. 'root'에 NULL을 할당하면 그 노드가 삭제된다는 의미는 아니지만'root' 포인터와 노드를 가르키는 링크를 끊지 만'left' 또는'right' 포인터는 여전히 그 포인터를 가리키고 있습니다 마디. 삭제하려면'free (root) '해야합니다. 하지만 해제하는 것만으로는 충분하지 않습니다. 부모 노드와 해제 된 노드 사이의 연결을 끊을 필요가 있습니다 (NULL을 각각의 '왼쪽'또는 '오른쪽'포인터에 할당). 귀하의'delNode()'함수가 불완전합니다. –