노드 - 1 = 간선의 수
def preorder(i):
if i: # 존재하는 정점이면
print(i, end = ' ')
preorder(left[i])
preorder(right[i])
return
def inorder(i):
if i:
inorder(left[i])
print(i, end = ' ')
inorder(right[i])
return
def postorder(i):
if i:
postorder(left[i])
postorder(right[i])
print(i, end = ' ')
return
V = int(input())
arr = list(map(int, input().split()))
E = V - 1 # 간선 수
left = [0] * (V + 1) # 부모를 인덱스로 왼쪽 자식 저장
right = [0] * (V + 1) # 부모를 인덱스로 오른쪽 자식 저장
par = [0] * (V + 1) # 자식을 인덱스로 부모 저장
# child = [[] for _ in range(V + 1)]
for i in range(E):
p, c = arr[i * 2], arr[i * 2 + 1]
if left[p] == 0:
left[p] = c
else:
right[p] = c
#child[p].append(c)
root = 1
while par[root] != 0: # root 찾기
root += 1
preorder(root)
수식을 표현하는 이진 트리
수식 트리의 순회
탐색 작업을 효율적으로 하기 위한 자료구조
- 모든 원소는 서로 다른 유일한 키를 갖는다
- key(왼쪽 서브트리) < key(루트노드) < key(오른쪽 서브트리)
- 왼쪽 서브트리와 오른쪽 서브트리 내도 이진 탐색 트리다
탐색할 키 값 x를 루트 노드의 키 갑과 비교
탐색할 x가 루트보다 작으면 왼쪽 서브트리를 기준으로 이동