2013-04-27 9 views
0

이 방법을 통해 이진 검색 트리를 정리했습니다. 코드는 교과서에 나와 있습니다. 결국 노드 temp를 생성하고 삭제해야하는 이유는 무엇입니까? 서브 루틴을 null로 만드는 대신 삭제하지 않으시겠습니까?이진 검색 트리 지우기

void Binary_tree<Entry> :: recursive_clear(Binary_node<Entry> * &sub_root) 
/* Post: The subtree rooted at sub_root is cleared. */ 
{ 
Binary_node<Entry> *temp = sub_root; 
if (sub_root == NULL) return; 
recursive_clear(sub_root->left); 
recursive_clear(sub_root->right); 
sub_root = NULL; 
delete temp; 
} 
+1

힌트 :'sub_root'는 참조로 전달됩니다. 이것은 ** 글자 그대로 ** 10 분 전에 요청되었습니다 : [link] (http://stackoverflow.com/questions/16255235/using-free-on-ac-struct/16255294#16255294) –

+0

@ H2CO3 그래, 왜 store sub_root sub_root-> left 또는 right를 전달하고 sub_root는 전달하지 않으므로 temp로 변경하십시오. –

+0

@Armin'sub_root = NULL;'문이 있기 때문에. –

답변

1
동적 메모리를 삭제하는 표준 방법은 삭제와 함께이기 ​​때문이다

delete it's used with pointers.

+0

임시 변수를 초기화하고 삭제하는 대신 서브 루트를 삭제하지 않는 이유는 무엇입니까? – VequalsIR

+0

음, 나는 그것이 좌우의 속성의 유형에 달려 있다고 생각합니다. 여기에 게시 할 수 있습니까? 난 그들이 포인터 또는 – vivoconunxino

+0

그들은 (... (sub_root-> 왼쪽)해야합니다, 그래서 당신처럼, temp var : S를 만들 이유가 표시되지 않습니다 알고 싶습니다. 나를 괴롭히는 것은 포인터 매개 변수에 대한 참조입니다. – vivoconunxino