가계도와 같은 계층적인 구조를 표현할 때 사용할 수 있는 알고리즘
이진 탐색이 동작할 수 있도록 고안된, 효율적인 탐색이 가능한 자료구조의 일종
왼쪽 자식 노드 < 부모 노드 < 오른쪽 자식 노드
트리 데이터를 이진 탐색 트리 형태로 가공하면 보다 효율적으로 탐색을 수행할 수 있음(노드들이 크기순으로 정렬되어 있기 때문) -> 시간복잡도 O(logN)
트리 자료구조에 포함된 노드를 특정 방법으로 한 번씩 방문하여 트리의 정보를 시각적으로 확인하는 방법
# 트리 선언
class Node:
def __init__(self, data, left_node, right_node):
self.data = data
self.left_node = left_node
self.right_node = right_node
# 전위 순회(pre-order traverse)
def pre_order(node):
print(node.data, end=' ')
if node.left_node !== None:
pre_order(tree[node.left_node])
if node.right_node !== None:
pre_order(tree[node.right_node])
# 중위 순회(in-order traverse)
def in_order(node):
if node.left_node !== None:
in_order(tree[node.left_node])
print(node.data, end=' ')
if node.right_node !== None:
in_order(tree[node.right_node])
# 후위 순회(post-order traverse)
def post_order(node):
if node.left_node !== None:
post_order(tree[node.left_node])
if node.right_node !== None:
post_order(tree[node.right_node])
print(node.data, end=' ')