루트, 왼쪽서브트리, 오른쪽서브트리로 구성
루트 : 중간값
왼쪽서브트리 : 루트보다 작은값
오른쪽 서브트리 : 루트보다 큰값
주로 중위 순회를 함( 왼쪽 노드 오른쪽)
이유 - 오름차순으로 출력할 수 있기 때문
삽입 - 루트에서 시작해서 적절한 위치에 새노드 추가
삭제 - 1. 자식노드가 없는경우 : 그냥삭제
2. 자식노드가 하나인경우 : 삭제후 부모와 자식 연결
3. 자식노드가 두개인경우 : 오른쪽 서브트리에서 가장 작은값으로 대체
시간복잡도 (검색, 삽입, 삭제 다 같음)
평균 O(log n)
최악 O(n) ( 불균형 트리 일 때)
IPL(내부경로길이)구하는법
루트부터 1로 시작해서 층마다 1씩 더하면서 내려가서 다더하면됨
레드 블랙 규칙을 사용하여 트리의 균형을 맞춤
규칙이 있는 이유 : 높이를 제한하여 최악의 경우에도 O(log n)을 유지
연속으로 두개 이상의 빨간색 노드가 안나오게, 검은색 높이가 알맞게 유지하면서 삽입 ( 안맞을 경우 색상변경 및 회전을 통해 균형을 맞춤)
삽입과 마찬가지로 색상하고, 검은색 높이를 알맞게 유지하면서 삭제해야됨
좌측회전, 우측회전
좌측회전(LR) - 특정 노드가 오른쪽 자식으로 이동하고, 그 오른쪽 자식은 왼쪽 자식으로 이동
우측회전(RR) - 특정 노드가 왼쪽 자식으로 이동하고, 그 왼쪽 자식은 오른쪽 자식으로 이동
검색, 삽입, 삭제 모두 O(log n)의 시간복잡도를 가짐
정해진 범위내에서 여러 자식을 가질 수 있음
모든 리프노드는 동일한 깊이에 위치 (균형트리)
노드가 가득찰 시 분할이 발생하며, 중간 값이 부모 노드로 올라가게 됨
노드가 너무 적은 값을 가지게 되면 병합이 발생하여, 형제 노드와 합쳐짐