Page 417 - Do it! 자료구조와 함께 배우는 알고리즘(C 언어, 3쇄)
P. 417
04 int cond;
05 if(p == NULL) {
06 p = AllocBinNode();
1
07 SetBinNode(p, x, NULL, NULL);
08 } else if((cond = MemberNocmp(x, &p->data)) == 0)
09 printf("【오류】 %d는 이미 등록되어 있습니다.\n", x->no); 3
10 else if(cond < 0)
2
11 p->left = Add(p->left, x); 4
12 else
13 p->right = Add(p->right, x); 5
14 return p;
15 }
16 (실습 10-2[D]에서 계속)
Add 함수는 x가 가리키는 Member형 객체를 트리에 삽입합니다. Search 함수와 마찬가지
로 Add 함수를 처음 호출할 때는 매개변수 p에 이진검색트리의 루트 노드 포인터를 전달합
니다. Add 함수는 재귀 함수이기 때문에 좀 더 자세히 알아보겠습니다.
p가 널인 경우( 1 )
처음에 Add 함수를 호출할 때 널이면 루트 노드가 없다는 뜻입니다(이진검색트리가 비어 있음).
따라서 루트 노드를 만들고 값을 설정합니다. 그러면 그림 10-13과 같이 루트만 있는 이진검
색트리가 만들어집니다. 함수를 처음 호출하는 상태가 아니라면(재귀 호출 시에 p의 값이 널이면)
노드를 삽입할 위치를 제대로 찾은 것입니다. 삽입할 노드를 만들고 값을 설정하면 삽입 과정
이 끝납니다.
p
data
left NULL
right NULL
[그림 10-13] 루트만 있는 이진검색트리
p가 널이 아닌 경우( 2 )
다음의 세 가지 방법으로 처리합니다.
10•트리 417