1:N 관계를 가지는 자료구조이다.
노드 (node): 트리의 원소간선 (edge): 노드를 연결하는 선, 부모 노드와 자식 노드를 연결한다.루트 노드 (root node): 트리의 시작 노드형제 노드 (sibling node) : 같은 부모 노드의 자식들조상 노드: 간선을 따라 루트 노드까지 이르는 경로에 있는 모든 노드들서브 트리 (subtree): 부모 노드와 연결된 간선을 끊었을 때 생성되는 트리자손 노드: 서브 트리에 있는 하위 레벨의 노드들노드의 차수 : 노드에 연결된 자식 노드의 수트리의 차수 : 트리에 있는 노드의 차수 중에서 가장 큰 값단말 노드 (리프 노드) : 차수가 0인 노드, 자식 노드가 없는 노드노드의 높이 : 루트에서 노드에 이르는 간선의 수, 노드의 레벨트리의 높이 : 트리에 있는 노드의 높이 중에서 가장 큰 값, 최대 레벨모든 노드들이 2개 이내의 서브 트리를 갖는 특별한 형태의 트리이며, 각 노드가 자식 노드를 최대한 2개까지만 가질 수 있다.
자식은 보통 왼쪽 자식 / 오른쪽 자식으로 구분한다.
모든 레벨의 노드가 빈자리 없이 꽉 차 있는 이진 트리이다.
핵심 단어
모든 레벨이 꽉 참

노드가 위에서 아래로, 왼쪽부터 차례대로 채워진 이진 트리이다.
핵심 단어
왼쪽부터 빈자리 없이 채움

노드들이 한쪽 방향으로만 계속 연결된 이진 트리이다.
핵심 단어
한쪽으로만 계속 이어짐

이진 트리는 각 노드에 번호를 붙이고, 노드 번호를 배열의 인덱스처럼 사용해서 표현할 수 있다.
10번 인덱스는 보통 사용하지 않는다.
현재 노드 번호가 i일 때
부모 노드 → i // 2
왼쪽 자식 노드 → i * 2
오른쪽 자식 노드 → i * 2 + 1
예를 들어 5번 노드의 부모는 2번, 왼쪽 자식은 10번, 오른쪽 자식은 11번이다.
완전 이진 트리 → 배열 표현에 적합
편향 이진 트리 → 빈 공간이 많이 발생
트리의 관계 자체를 배열에 저장할 수도 있다.
부모 번호를 배열의 인덱스로 사용하고, 해당 부모의 자식 번호를 저장한다.

부모 1 → 자식 2, 3
부모 2 → 자식 4
부모 3 → 자식 5
즉, 부모를 알고 있을 때 자식을 찾기 편한 방식이다.
반대로 자식 번호를 배열의 인덱스로 사용하고, 해당 자식의 부모 번호를 저장한다.

자식 2 → 부모 1
자식 3 → 부모 1
자식 4 → 부모 2
자식 5 → 부모 3
즉, 자식을 알고 있을 때 부모를 찾기 편한 방식이다.
부모를 계속 따라 올라가면 조상과 루트도 찾을 수 있다.
5 → 3 → 1
여기서 1이 루트 노드가 된다.
배열을 이용한 이진 트리는 구현이 간단하지만 다음과 같은 단점이 있다.
이러한 단점을 보완하기 위해 연결 리스트를 이용한 표현을 사용할 수 있다.
각 노드는 다음 세 가지 정보를 가진다.

왼쪽 자식 | 데이터 | 오른쪽 자식
left : 왼쪽 자식 노드data : 현재 노드의 값right : 오른쪽 자식 노드자식이 없는 경우에는 해당 위치를 null로 둔다.
배열처럼 공간을 미리 만들어두는 것이 아니라 필요한 노드끼리 직접 연결하는 방식이다.
트리의 각 노드를 중복되지 않게 전부 방문하는 것 이다.

현재 노드 n을 방문해 처리한다. → V
현재 노드 n의 왼쪽 서브트리로 이동한다 → L
현재 노드 n의 오른쪽 서브트리로 이동한다. → R
preorder_traversr(T): # 전위 순회
if T:
visit(T)
preorder_traverse(T.left)
preorder_traverse(T.right)

현재 노드 n의 왼쪽 서브트리로 이동한다. → L
현재 노드 n을 방문해 처리한다. → V
현재 노드 n의 오른쪽 서브트리로 이동한다 → R
inorder_traverse(T): # 중위 순회
if T:
inorder_traverse(T.left)
visit(T)
inorder_traverse(T.right)

현재 노드 n의 왼쪽 서브트리로 이동한다. → L
현재 노드 n을 오른쪽 서브트리로 이동한다. → R
현재 노드 n을 방문해 처리한다. → V
postorder_traverse(T): # 후위 순회
if T:
postorder_traverse(T.left)
postorder_traverse(T.right)
visit(T)

탐색 작업을 효율적으로 하기 위한 자료구조이며, 모든 원소는 서로 다른 유일한 키를 가진다.
key(왼쪽 서브트리) <key(루트 노드) <key(오른쪽 서브트리)- 중위순회를 하면 오름차순으로 정렬된 값을 얻을 수 있다.




완전 이진 트리에 있는 노드 중에서 키 값이 가장 크거나, 작은 노드를 찾기 위해서 만든 자료구조이다.
- 최대 힙
- 키 값이 가장 큰 노드를 찾기 위한 힙이다.
- 항상 부모 노드의 키 값 > 자식 노드의 키 값 조건을 만족한다.
- 루트 노드: 키 값이 가장 큰 노드이다.
- 최소 힙
- 키 값이 가장 작은 노드를 찾기 위한 힙이다.
- 항상 부모 노드의 키 값 < 자식 노드의 키 값 조건을 만족한다.
- 루트 노드: 키 값이 가장 작은 노드이다.
