728x90
- 트리의 개념
- 비선형 구조
- 원소들 간에 1:N 관계를 가지는 자료구조
- 원소들 간에 계층관계를 가지는 계층형 자료구조
- 상위 원소에서 하위 원소로 내려가면서 확장되는 트리(나무)모양의 구조
- 정의
- 노드(node) : 트리의 원소
- 루트 노드(root node) : 트리의 시작 노드
- 간선(edge) : 노드를 연결하는 선
- 형제 노드(Sibling node) : 같은 부모 노드의 자식 노드들
- 조상 노드 : 간선을 따라 루트 노드까지 이르는 경로에 있는 모든 노드들
- 서브 트리(subtree) : 부모 노드와 연결된 간선을 끊었을 때 생성되는 트리
- 자손 노드 : 서브 트리에 있는 하위 레벨의 노드들
- 차수(degree)
- 노드의 차수 : 노드에 연결된 자식 노드의 수
- 트리의 차수 : 트리에 있는 노드의 차수 중에서 가장 큰 값
- 단말 노드(리프 노드) : 차수가 0인 노드, 자식 노드가 없는 노드
- 높이
- 노드의 높이 : 루트에서 노드의 이르는 간선의 수, 노드의 레벨
(루트 노드의 높이 0) - 트리의 높이 : 트리에 있는 노드의 높이 중에서 가장 큰 값, 최대 레벨
- 노드의 높이 : 루트에서 노드의 이르는 간선의 수, 노드의 레벨
- 이진트리
- 모든 노드들이 2개의 서브트리를 갖는 특별한 형태의 트리
- 자식 노드 최대 2개
- 왼쪽 자식 노드(left child node)
- 오른쪽 자식 노드(right child node)
- 레벨 i에서의 노드 최대 개수 : 2^i
- 높이가 h인 이진 트리가 가질 수 있는 노드의 개수 : h+1 ~ 2^(h+1) -1
- 포화 이진 트리(Full Binary Tree)
- 모든 레벨에 노드가 포화상태로 차 있는 이진 트리
- 높이가 h일 때, 최대의 노드 개수인 2^(h+1)-1의 노드를 가진 이진 트리
- 루트를 1번으로 하여 2^(h+1)-1까지 정해진 위치에 대한 노드 번호를 가짐
- 완전 이진 트리(Complete Binary Tree)
- 높이가 h이고 노드 수가 n개일 때, 포화 이진 트리의 노드 번호 1번부터 n번까지 빈 자리가 없는 이진 트리
- 편향 이진 트리(Skewed Binary Tree)
- 높이 h에 대한 최소 개수의 노드를 가지면서 한쪽 방향의 자식 노드만을 가진 이진 트리
- 이진 트리 순회(traversal) : 트리의 노드들을 체계적으로 방문하는 것
- 전위 순회(preorder traversal) : VLR(부모 -> 왼쪽 자식 -> 오른쪽 자식)
- 중위 순회(inorder traversal) : LVR(왼쪽 자식 -> 부모 -> 오른쪽 자식)
- 후위 순회(postorder traversal) : LRV(왼쪽 자식 -> 오른쪽 자식 -> 부모)
# edge 수
E = int(input()) # 4
arr = list(map(int, input().split())) # 1 2 1 3 3 4 3 5
V = E + 1 # 정점 수 == 1번부터 V번까지 정점이 있을때 마지막 정점 번호
# 부모번호를 인덱스로 자식번호 저장
ch1 = [0]*(V+1)
ch2 = [0]*(V+1)
for i in range(E):
p,c = arr[i*2],arr[i*2+1] # 부모, 자식
if ch1[p] == 0:
ch1[p] = c
else:
ch2[p] = c
def pre_order(v):
if v: # 0번 정점이 없으므로, 0번은 자식이 없는 경우를 표시
print(v) # visit(v)
pre_order(ch1[v])
pre_order(ch2[v])
def in_order(v):
if v:
in_order(ch1[v])
print(v)
in_order(ch2[v])
def post_order(v):
if v:
post_order(ch1[v])
post_order(ch2[v])
print(v
pre_order(1) # 1 2 3 4 5
print('-------')
in_order(1) # 2 1 4 3 5
print('-------')
post_order(1) # 2 4 5 3 1
728x90
반응형
'TIL - 프로그래밍 > 개념, 설정' 카테고리의 다른 글
[Python] Tree3 - heap (0) | 2022.04.05 |
---|---|
[Python] Tree2 (0) | 2022.04.04 |
[Python] 재귀로 순열, 조합 (0) | 2022.03.28 |
[Python] 반복과 재귀 (0) | 2022.03.26 |
[Python] 비트 연산 (0) | 2022.03.23 |
댓글