DeleteAllNodes 에서 질문있습니다.
374
작성한 질문수 57
안녕하세요 .
교수님의 DeleteAllNodes 코드는 아래와같습니다.
void DeleteAllNodes(Node*root){
if (root == NULL) { return; }
Node* pright = root->right;
DeleteAllNodes(root->left);
free(root);
DeleteAllNodes(pright);
}
하지만 이 코드는 Tree의 root 를 NULL로 바꿔주지못해 실제 활용시 에러를 발생시키는데요 따라서
Node**ptr 을 Parameter로 사용하거나 Tree를 활용해야하는데 재귀호출을 사용하다보니 Node**ptr을 Parameter로 받기는 조금 번거롭고
따라서 Tree를 활용하기위해 아래와같이
DeleteAllItems 라는 함수를 따로만들어
void DeleteAllNodes(Node*root) {
/*
if (root == NULL) { return; }
Node* pright = root->right;
DeleteAllNodes(root->left);
free(root);
DeleteAllNodes(pright);
*/
if (root == NULL) { return; }
Node* pright = root->right;
if (root->left != NULL) { DeleteAllNodes(root->left); }
free(root);
if (root->left != NULL) { DeleteAllNodes(pright); }
}
void DeleteAllItems(Tree* tree) {
if (tree->root == NULL) { return; }
DeleteAllNodes(tree->root);
tree->root = NULL;
tree->m_items = 0;
}
이렇게 구현하는것이 더 좋지않나 싶은데 선생님은 어떻게 생각하시나요?
답변 5
1
수정하신 대로 하셔도 큰 문제는 없습니다만 곧 지워질 노드에 굳이 NULL을 대입하는 낭비가 발생합니다.
부분적으로 지웠다가 생성했다 하는 트리에서는 꼬박꼬박 NULL을 대입해주는 것이 좋겠지요.
모두 삭제하는 경우에는 DeleteAllNodes(...)를 호출한 곳에서 root = NULL로 바꿔주는 것이 가장 간결합니다.
이 이상은 본 강의의 범위를 벗어나겠네요. 실무에서는 상황에 따라 선택해서 구현하시면 됩니다.
0
안녕하세요. 교수님이 직접 답변해주시는건 오랜만이네요 .
아래는 DeleteAllItems 를 따로 구현않고 , DeleteAllNodes 만을 이용한 코드입니다.
삭제하는행위는 정상적으로 되더라도 , Tree의 root가 NULL로 변경되지 않았기에 PrintTree를 하게되면 비어버린 객체에 접근하게 되어 비정상적인 결과가 발생하는것을 볼 수 있습니다.

아래는 DeleteAllItems 를 사용한 코드로 , Tree 의 root 와 m_items 를 0으로 초기화하여 print Tree등 다른 기능을 수행시에도 문제없이 작동합니다.

26년 1회 실기 해설 강의
0
32
2
주소 연산자(&) 간접 지정자(*) 반대 개념
0
22
1
53번 4-1 자료 오류 있는 것 같습니다.
0
60
2
7번문제
0
48
2
C언어 변형문제 9번문제 Pdf 수정요청
0
38
2
메서드 오버드라드
0
40
2
이진 탐색: 탐색 실패하는 경우 어째서 first > last인 경우가 나오나요?
0
324
1
17.12) access violation
0
307
1
finditembyindex 질문드립니다!
0
348
1
19:20 부분에서 질문있습니다.
0
278
1
pnode = pnode->next; 와 pnode->next = pnode;는 같은 것으로 생각해도 될까요?
0
401
2
질문. warning뜨는 이유
0
300
1
링크드 리스트 질문 드립니다.
0
216
1
함수포인터 질문드립니다
0
224
1
강의 내용 질문 드립니다!
0
369
2
노드 주소 순서 관련 질문
0
282
1
질문드립니다!
0
242
1
16:30 질문입니다.
0
343
4
scanf 질문이요!!
0
253
1
12:30 의 ArrayQueue.h
0
292
2
10:10 Add front에서 질문드립니다.
1
362
1
스택 자료구조
0
246
1
변수 count의 활용에 대해 질문이 있습니다.
0
319
1
1번 실행하면 에러가 뜨는데 이유를 모르겠습니다..
0
370
2





