hello world

red black tree 본문

자료구조

red black tree

sohyun_92 2020. 11. 17. 21:36
728x90

Binary Search Tree 3가지 Search insert delete
- 노드입장에서 왼쪽은 나보다 작고 다른쪽은 큰 트리. 극단적으로 치우칠수 있다.
O(n), O(h)

 

Random Permitation - 

실제로 극단적인 경우를 제외하고 저장되는 데이터들이 랜덤하다면 평균 시간복잡도가 n  된다.
저장된 데이터의 순서가 정렬된 bst에 insert 된다면 처음 온것이 루트가 될것이다.

동작원리 - 2진검색트리와 비슷(단, 트리가 완벽하게 Balance  맞춰있다면....)

 

최악의 겨우 트리가 극단적으로 unBalance   있다. 그러므로 트리가 무너지지 않도록 추가적인 작업이 필요하다.
->>>>>> 여러가지 방법중 대표적인 예시가 

red black tree 이다.

 

red black tree (레드 - 블랙 트리)

-이진 탐색 트리의 일종이다. BST
-insert와 delete 알고리즘을 적절하게 수정한것이다.

O(log2n)
-Search, Insert, Delete  시간복잡도는 높이에 비례한다. O(h)

-각의 노드는 각각의 키와 부모노드의 주소를 가지고(저장) 있을  있다. (단 부모노드의 주소를 저장하지 안고 작성된것들도 있다.)

-자식노드가 존재하지 않을 경우 NIL 노드라고 부르느 특수한 노드가 있다 가정한다.

 

회색(레드노드로 가정)

 

다음의 조건을 만족하는 이진트리느 red black tree (레드 - 블랙 트리)

1.각 노드는 red 혹은 black이고,

2.루트노드는 black이고,

3.모든 리프노드(즉 ,NIL노드)는 black이고,

4.red노드의 자식노드들은 전부 black이고(즉, red 노드는 연속되어 등장하지않음)

5.모든 노드에 대해서 그 노드로부터 자손인 리프노드에 이르는 모든 경로에는 동일한 개수의 

black 노드가 존재한다.

 

 

red black tree의 SEARCH/ INSERT /DELETE

1.SEARCH : 이진트리와 별다를게 없음

 

2.

LEFT-ROTATE : 왼쪽그림에서 오른쪽그림으로 수정하는 것  ( 수정해도 이진 트리의 탐색 특성이 그대로 유지됨)

RIGHT_ROTATE : LEFT ROTATE 반대 

 

LEFT-ROTATE(T,x){ //T : tree , x: node
    y <- right[x]  
    right[x] <- left[y]
    p[left[y]] <- x
    p[y] <- p[x]                     //x의 부모가 y의 부모
    if p[x] = nil[T]                 //현재 x의부모가 nil이라면 (= x가 루트라면)
        then root[T] <- y             //y가 새로운 트리의 루트      
        else if x = left[p[x]]        //x의 부모노드가 실제로 존재한다면 x 부모의 왼쪽자식이라면
            then left[p[x]] <- y      //y가 x부모의 왼쪽자식
            else right[p[x]] <- y     //y가 x부모의 새로운 오른쪽자식                                                                      
    left[y] <- x                      //x가 y의 왼쪽자식
    p[x] <- y                         //x의 부모가 y가 됨
}

 

참고 영상

 

www.inflearn.com/course/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EA%B0%95%EC%A2%8C/lecture/4097?tab=note

'자료구조' 카테고리의 다른 글

해싱3  (0) 2020.11.29
해슁1  (0) 2020.11.24
이진검색트리3  (0) 2020.11.15
이진 검색 트리(Binary Search Tree)  (0) 2020.11.10
스택(Stack)  (0) 2020.10.16
Comments