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
   412   413   414   415   416   417   418   419   420   421   422