레드 블랙트리의 속성 복습하기!
- 루트 노드는 Black
⭐ 4. Red 의 자녀들은 Black ( = Red 는 연속적으로 존재할 수 없다 )
⭐ 5. 임의의 노드에서 자손 nill 노드들까지 가는 경로들의 Black 수는 같다 ( 자기 자신은 카운트에서 제외 )
Red 삽입 후 #2 속성
(루트=Black) 을 위반
해결 : 루트 노드를 Black 으로 바꿔주기
Red 를 삽입하는 이유 : 삽입 후에도 #5 속성
을 만족시키기 위해
ex) Red 노드 삽입 후에는 조상 노드부터 nill 노드까지의 경로의 black 수는 같다
: Red 삽입 후 #4 속성
(Red 자녀 = Black) 을 위반
#5
속성 유지됨): Red 삽입 후 #4 속성
(Red 자녀 = Black) 을 위반
Case 3
형태로 만들어주기Case 3
와 같은 방식으로 해결: Red 삽입 후 #4 속성
(Red 자녀 = Black) 을 위반
형태 : Red 가 몰려있다!
- 삽입된 노드의 위치는 상관없음
- 부모 = red
- 부모 형제 = red
( 왼쪽/오른쪽 바꿔도 성립 )
해결 : 위반한 노드를 반대편으로 옮겨주기
#2 속성
을 위반했다면 루트노드를 Black으로 바꾸기
<예시> : M
을 기준으로 우회전
M
은 왼쪽 서브트리와 함께 위로 올라감S
의 오른쪽 서브트리는 밑으로 내려감.M
의 오른쪽 서브트리가 S
의 왼쪽 서브트리가 된다.