본문 바로가기
알고리즘

이진검색트리-3

by 근즈리얼 2021. 3. 8.
728x90

delete

- case 1 : 자식 노드가 없는 경우

-case 2 : 자식노드가 1개인 경우

- case 3 : 자식노드가 2개인 경우

- 지우려는 값의 successor을 찾는다

- 지우려는 값에 successor을 복사하고 successor의 값은 지운다.

 

delete의 수도코드

 

- 처음 if는 자식이 1개 이하인 경우이다. if문안에 들어가면 y에 지우려는 값을 넣는다

- if문안에 못들어가면 y에는 지우려는 값의 successor값을 넣는다.

- 다음 if문에는 y의 왼쪽 값이 있다면 x에 왼쪽 값, 오른쪽 값이 있다면 x에 오른쪽 값을 넣는다.

- 만약 x의 값이 없다면 y의 부모를 x의 부모로 만들어준다.

- 만약 y의 부모가 null 즉 y가 루트면 x를 트리의 루트로 만들어준다.

- 만약 그렇지 않고 y가 부모의 왼쪽 값이면 x를 왼쪽 값으로 만들고 오른쪽 값이면 x를 오른쪽 값으로 만든다.

- 만약 y!=z 즉 밑에 자식이 둘일 경우 z에 y값을 복사하여 넣는다.

- y를 리턴하는데 y는 delete되는 값이다.

- 시간복잡도 : o(h)

위에서부터 

1. 자식이 0일경우

2. 자식이 하나인 경우

3. 자식이 둘인 경우

 

**시간복잡도

- 각종 연산의 시간복잡도 o(h)

- 그러나 최악의 경우 트리의 높이 h=o(n)이 될수 있다. 그렇다면 힘들게 트리 구조를 이용할 필요가 없어진다.

- 균형잡힌 트리

  • 레드-블랙 트리 등
  • 키의 삽입이나 삭제시 추가로 트리의 균형을 잡아줌으로써 높이를 o(logn)으로 유지

* 위의 그림들은 "영리한 프로그래밍을 위한 알고리즘" 강좌에서 가져왔습니다.

728x90

'알고리즘' 카테고리의 다른 글

그래프 알고리즘 - 1  (0) 2021.03.16
hashing - 마지막  (0) 2021.03.11
이진검색트리-2  (0) 2021.03.07
이진검색트리-1  (0) 2021.03.07
트리와 이진트리  (0) 2021.03.07

댓글