계층적으로 데이터를 표현하기 위해 사용하는 자료구조
※ 트리크기가 N일때 간선개수는 N-1이다.
Binary search tree, 이진탐색이 효과적으로 동작할 수 있도록 고안된 트리구조이다.
위와 같이 왼쪽자식<부모<오른쪽자식의 관계로 이루어져 있다.
찾고자 하는 원소와 노드 원소를 서로 비교해가면서 순차적으로 탐색한다.
위 트리에서 37을 찾는다고 할때
유의사항
#트리순회
#class
#print 순서에 유의
class Node:
def __init__(self, data, left_node, right_node):
self.data = data
self.left_node = left_node
self.right_node = right_node
#전위 순회(root>left>right)
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])
#중위 순회(left>root>right)
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])
#후위 순회(left>right>root)
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=' ')
import sys
n = int(input())
tree = {}
for i in range(n):
#node 개수 n개
data, left_node, right_node = map(str, sys.stdin.readline().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'])
이코테 2021 - 이진트리/이진탐색
https://www.youtube.com/watch?v=i5yHkP1jQmo&list=PLRx0vPvlEmdAghTr5mXQxGpHjWqSz0dgC&index=12