코드 9-6을 보면 코드가 길고 복잡해 보이지만 이전 절에서 설명한 내용을 단순히 구현한 것에 불과합니다. 이전 절에서 부모 노드가 조부모 노드의 왼쪽 자식일 때만 설명했는데, 구현에서는 부모 노드가 조부모 노드의 오른쪽 자식일 때도 모두 처리해 두었습니다. 잘 살펴보면 부모 노드가 왼쪽 자식일 때를 대칭적으로 바꾼 것뿐이라는 것을 알 수 있습니다. 이제 잘 작동하는지 테스트해 보겠습니다.
코드 9-7
# 편의 함수
def print_node(self, rbn):
if rbn:
print("node : {}, ".format(rbn.key), end=" ")
if rbn.color == "RED":
print("color : RED, ", end=" ")
else:
print("color : BLACK, ", end=" ")
if rbn.left:
print("left : {}, ".format(rbn.left.key), end=" ")
if rbn.right:
print("right : {}, ".format(rbn.right.key), end=" ")
if rbn.parent:
print("parent : {}".format(rbn.parent.key), end=" ")
print()
if __name__ == "__main__":
print('*'*100)
rbt = RedBlackTree()
for i in range(10):
rbt.insert(i)
rbt.preorder_traverse(rbt.get_root(), rbt.print_node)
print('*'*100)