Page 423 - Do it! 자료구조와 함께 배우는 알고리즘(C 언어, 3쇄)
P. 423
가 널 포인터라면 아무것도 하지 않고 호출한 위치로 돌아갑니다.
하지만 그림 10-17에서는 루트 노드 6의 포인터가 널 포인터가 아니므로 PrintTree 함수는
다음의 과정을 거치며 실행됩니다.
1 노드 2를 가리키는 왼쪽 포인터를 PrintTree 함수에 전달하면서 재귀적으로 호출합니다(재귀).
2 현재 노드의 데이터인 6을 출력합니다.
3 노드 7을 가리키는 오른쪽 포인터를 PrintTree 함수에 전달하면서 재귀적으로 호출합니다(재귀).
이때 1 , 3 은 재귀 호출이기 때문에 다시 다음과 같이 실행됩니다. 다음은 1 에 대한 실행
예입니다.
a 노드 1을 가리키는 왼쪽 포인터를 PrintTree 함수에 전달하면서 재귀적으로 호출합니다(재귀).
b 현재 노드의 데이터인 2를 출력합니다.
c 노드 4를 가리키는 오른쪽 포인터를 PrintTree 함수에 전달하면서 재귀적으로 호출합니다(재귀).
이런 과정을 반복하면서 이진검색트리의 데이터를 오름차순으로 출력합니다.
모든 노드를 삭제하는 FreeTree 함수
FreeTree 함수는 모든 노드를 삭제하는 함수로, 후위 순회(postorder) 방법으로 트리를 검색
하며 삭제를 진행합니다.
실습 10-2[F] •완성 파일 chap10/BinTree.c
01 /*--- 모든 노드를 삭제 ---*/
02 void FreeTree (BinNode *p)
03 {
04 if(p != NULL) {
05 FreeTree(p->left);
06 FreeTree(p->right);
07 free(p);
08 }
09 }
10•트리 423