본문 바로가기
  • _^**_
무근본 IT 지식 공유/무근본 파이썬(Python)

[무근본파이썬] 레드블랙 트리가 대체 뭐야?!

by 크리드로얄워터 2023. 11. 25.
반응형

레드-블랙 트리(Red-Black Tree)는 자가 균형 이진 탐색 트리의 일종입니다.

이 구조는 효율적인 검색, 삽입, 삭제 작업을 위해 트리의 균형을 유지합니다.


각 노드는 레드 혹은 블랙 색상을 가지며, 다음과 같은 속성을 만족해야 합니다.

1. 노드 색상: 각 노드는 레드 또는 블랙입니다.
2. 루트 노드: 트리의 루트 노드는 항상 블랙입니다.
3. 리프 노드: 모든 리프(끝) 노드는 블랙입니다.
4. 레드 노드: 레드 노드의 자식 노드는 모두 블랙입니다(연속된 레드 노드가 없음).
5. 블랙 균형: 각 노드에서 임의의 리프 노드로의 경로에 있는 블랙 노드의 수는 모두 같습니다.

레드-블랙 트리의 예시로 삽입 작업을 살펴보겠습니다. 삽입은 일반적인 이진 탐색 트리와 유사한 방식으로 진행되지만, 새로 삽입된 노드는 항상 레드입니다. 삽입 후에는 위의 속성들을 유지하기 위해 필요한 경우 트리를 재구성하거나 색상을 조정합니다.

다음은 Python을 사용한 레드-블랙 트리의 삽입 작업 예시입니다. 이 코드는 기본적인 구조와 삽입 메커니즘을 보여줍니다. 실제 구현에서는 더 많은 세부 사항과 예외 처리가 필요할 수 있습니다:


class Node:
    def __init__(self, data, color="RED"):
        self.data = data
        self.color = color
        self.parent = None
        self.left = None
        self.right = None

class RedBlackTree:
    def __init__(self):
        self.root = None

    def insert(self, data):
        new_node = Node(data)
        if self.root is None:
            self.root = new_node
            self.root.color = "BLACK"
        else:
            self._insert_node(self.root, new_node)
            self._fix_insert(new_node)

    def _insert_node(self, current, new_node):
        if new_node.data < current.data:
            if current.left:
                self._insert_node(current.left, new_node)
            else:
                current.left = new_node
                new_node.parent = current
        else:
            if current.right:
                self._insert_node(current.right, new_node)
            else:
                current.right = new_node
                new_node.parent = current

    def _fix_insert(self, node):
        # 여기에 삽입 후 재조정 로직 구현
        pass

# 사용 예시
rbt = RedBlackTree()
rbt.insert(10)
rbt.insert(20)
rbt.insert(30)



이 코드는 레드-블랙 트리의 기본 구조와 삽입 로직의 개요를 보여줍니다. 실제 구현에서는 _fix_insert 메소드에서 색상 변경 및 회전 로직을 추가해야 합니다. 이는 균형을 유지하기 위해 필요한 조정 작업입니다.

반응형

댓글