왼쪽 자식 노드 < 부모 노드< 오른쪽 자식 노드
- 부모 노드보다 왼쪽 자식 노드가 작음.
- 부모 노드보다 오른쪽 자식 노드가 큼.
- 전위 순회(pre-order traverse): 루트를 먼저 방문.
- 중위 순회(in-order traverse): 왼쪽 자식을 방문한 뒤에 루트를 방문.
- 후위 순회(post-order treavers): 오른쪽 자식을 방문한 뒤에 루트를 방문.
Class Node:
def __init__(self,data,left_node,right_node):
self.data = data
self.left_node = left_node
self.right_node = right_node
# 전위 순회(PreOrder Traversal)
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])
# 중위 순회(InOrder Traversal)
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])
# 후위 순회(PostOrder Traversal)
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=' ')
n = int(input())
tree = {}
for i in range(n):
data, left_node, right_node = input().split()
if left_node == "None":
left_node = None
if right_node == "None":
right_node = None
tree[data] = Node(data, left_node, right_node)
pre_order(tree['A'])
print()
in_order(tree['A'])
print()
post_order(tree['A'])
# 입력
7
A B C
B D E
C F G
D None None
E None None
F None None
G None None
# 결과
A B D E C F G
D B E A F C G
D E B F G C A