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

이 과정을 간단히 정리하면 다음과 같습니다.



                         • 삭제할 노드가 부모 노드의 왼쪽 자식이면 부모의 왼쪽 포인터를 NULL로 합니다.
                         • 삭제할 노드가 부모 노드의 오른쪽 자식이면 부모의 오른쪽 포인터를 NULL로 합니다.



                        이 작업이 끝난 다음에 삭제 대상인 노드 객체의 메모리 영역을 해제하면 됩니다. 만일 이런

                        순서로 삭제를 진행하지 않고 삭제할 노드의 메모리를 먼저 해제하면 부모는 해제한 메모리
                        의 주소를 가리킵니다. 이렇게 되면 프로그램에 치명적인 오류가 발생할 수 있습니다.



                        자식 노드가 1개인 노드를 삭제하는 경우( a       ,  b       )
                        그림 10-15의  a 는 자식 노드를 1개만 갖는 노드인 7을 삭제하는 경우입니다. 이런 경우에
                        는 원래 노드 7의 위치로 노드 8을 가져와야 삭제할 수 있습니다. 이런 과정을 거치면 ‘자식
                        노드 8을 루트로 하는 서브 트리의 모든 키 값은 부모 노드인 6보다 커야 한다’라는 조건을

                        유지할 수 있습니다. 삭제 노드의 부모 노드인 6의 오른쪽 포인터가 삭제 대상 노드인 7의 자
                        식 노드 8을 가리키도록 업데이트하면 됩니다. 그러면 7은 아무것도 가리키지 않기 때문에
                        이진검색트리에서 삭제됩니다.


                        a  7을 삭제하는 경우                        b  1을 삭제하는 경우
                            검색과 마찬가지로 7을 찾아갑니다. 그런 다             검색과 마찬가지로 1을 찾아갑니다. 그런 다
                            음 삭제할 노드 7에서 멈춥니다.                   음 삭제할 노드 1에서 멈춥니다.

                                      6                                    6
                                    2    7                              2     7
                                 1    4     8                         1    4     8
                                    3    5     9                   0    3     5     9


                            부모 노드인 6의 오른쪽 포인터가 7의 자식            부모 노드인 2의 왼쪽 포인터가 1의 자식
                            노드인 8을 가리키도록 업데이트합니다.               노드인 0을 가리키도록 업데이트합니다.

                                      6                                    6
                                            7
                                    2    8                         1    2     7
                                 1    4     9                         0    4     8
                                    3    5                              3     5     9

                                        [그림 10-15] 자식 노드가 1개인 노드를 삭제하는 과정








                                                                                          10•트리  419
   414   415   416   417   418   419   420   421   422   423   424