Page 415 - Do it! 자료구조와 함께 배우는 알고리즘(C 언어, 3쇄)
P. 415

1. 루트부터 선택하여 검색을 진행합니다. 여기서 선택하는 노드를 p라고 합니다.
                         2. p가 널이면 검색에 실패합니다.
                         3.   검색하는 값 key와 선택한 노드 p의 키 값을 비교하여
                           • 값이 같으면 검색에 성공(검색 종료)합니다.
                           • key가 작으면 선택한 노드에 왼쪽 자식 노드를 대입합니다(왼쪽으로 검색 진행).
                           • key가 크면 선택한 노드에 오른쪽 자식 노드를 대입합니다(오른쪽으로 검색 진행).
                         4. 2번 과정으로 되돌아갑니다.




                        Search 함수는 이 알고리즘을 바탕으로 이진검색트리에서 노드를 검색합니다.


                         실습 10-2[B]                                              •완성 파일 chap10/BinTree.c
                         01  /*--- 검색 ---*/
                         02  BinNode *Search (BinNode *p, const Member *x)
                         03  {
                         04    int cond;
                         05    if(p == NULL)
                         06      return NULL;        /* 검색 실패 */
                         07    else if((cond = MemberNocmp(x, &p->data)) == 0)
                         08      return p;            /* 검색 성공 */
                         09    else if(cond < 0)
                         10      Search(p->left, x);    /* 왼쪽 서브 트리에서 검색 */
                         11    else
                         12      Search(p->right, x);  /* 오른쪽 서브 트리에서 검색 */
                         13  }
                         14                                                       (실습 10-2[C]에서 계속)



                        이 함수를 호출하면서 매개변수 p에 이진검색트리의 루트 노드 포인터를 전달합니다. 그런
                        다음 x가 가리키는 구조체 Member형 객체와 같은 키 값을 갖는 노드를 검색합니다. 검색에
                        성공하면 해당 노드에 대한 포인터를 반환합니다.                    MemberNoCmp 함수는 Member.c에 있습니다.



                        노드를 삽입하는 Add 함수
                        노드를 삽입할 때 주의해야 할 점은 노드를 삽입한 다음에 트리의 형태가 이진검색트리의 조건
                        을 유지해야 한다는 점입니다. 따라서 노드를 삽입할 때는 알맞은 위치에 삽입해야 합니다. 이

                        때 삽입할 노드의 키와 같은 값을 가지는 노드가 이미 있다면 노드를 삽입해서는 안 됩니다.


                        그러면 그림 10-12를 보면서 좀 더 자세히 살펴보겠습니다. 4개의 노드(2, 4, 6, 7)로 이루어진




                                                                                          10•트리  415
   410   411   412   413   414   415   416   417   418   419   420