자료구조 & 알고리즘
자료구조 : 이진 트리(Binary Tree) / 이진 탐색 트리(Binary Search Tree)
머기조
2023. 3. 16. 21:06
이진 트리(Binary Tree)
- 사전적 정의 : 각각의 노드가 최대 두 개의 자식 노드를 가지는 트리 자료구조의 하나로, 자식 노드를 각각 왼쪽 자식 노드와 오른쪽 자식 노드라고 한다.
- 이진 트리의 모든 노드는 왼쪽 자식 노드와 오른쪽 자식 노드만 가진다.
- 모든 노드의 차수가 최대 2

이진 트리의 순환적 구성
- 노드의 왼쪽 자식 노드를 루트로 하는 왼쪽 서브트리도 이진 트리
- 노드의 오른쪽 자식 노드를 루트로 하는 오른쪽 서브 트리도 이진 트리

이진 트리의 특성
- N개의 노드를 가진 이진 트리는 항상 (N - 1)개의 간선을 가진다. => 루트를 제외한 (N - 1)개의 노드가 부모 노드와 연결되는 하나의 간선을 가지기 때문이다.
- 높이 h의 이진 트리는 최소 h + 1개 최대 2^(h+1) - 1개의 노드를 가진다. => 이진 트리의 높이가 h가 되려면 한 레벨에 최소한 한 개의 노드가 있어야 하므로 높이가 h인 이진 트리의 최소 노드의 개수는 (h + 1) => 하나의 노드는 최대 2개의 자식 노드를 가질 수 있으므로 레벨 i에서의 노드의 최대 개수는 2^i개 이므로 높이가 h인 이진 트리 전체의 노드 개수는 ∑2^i = 2^(h+1) - 1개
포화 이진 트리
- 모든 레벨에 노드가 포화 상태로 차 있는 이진 트리
- 높이가 h일 때, 최대의 노드 개수인 (2^(h+1) - 1)개의 노드를 가진 이진 트리
- 루트를 1번으로 하여 2^(h+1) - 1까지 정해진 위치에 대한 노드 번호를 가진다.

완전 이진 트리
- 높이가 h이고 노드 수가 n개 일 때 (단, h + 1 <= n <= 2^(h+1) - 1),
- 레벨 h - 1까지는 Full Binary Tree이고, 레벨 h에서 왼쪽부터 노드가 순서대로 채워진 이진 트리
- 즉, 포화 이진 트리에서 리프 노드를 차례로 지우면서 얻어지는 모든 트리 구조들이 완전 이진 트리라고 할 수 있다.

편향 이진 트리
- 높이 h에 대한 최소 개수의 노드를 가지면서 한쪽 방향의 자식 노드만을 가진 이진 트리
- 왼쪽 편향 이진 트리 : 모든 노드가 왼쪽 자식 노드만을 가진 편향 이진 트리
- 오른쪽 편향 이진 트리 : 모든 노드가 오른쪽 자식 노드만을 가진 편향 이진 트리

이진트리의 순회
전위 순회(Preorder Traversal)
- 수행 방법 : 현재 노드 n에서 명령 수행 -> 왼쪽 서브트리로 이동 -> 오른쪽 서브트리로 이동
- 즉, {부모 -> 왼쪽자식 -> 오른쪽자식}
- 언제나 부모가 자식들보다 순위가 높음
- 어떠한 부모-자식 노드 쌍을 선택하든, 부모가 자식보다 먼저 출력(처리)된다는 특성이 있음

중위순회(Inorder Traversal)
- 수행 방법 : 현재 노드 n의 왼쪽 서브트리로 이동 -> 현재 노드 n에서 명령 수행 -> 현재 노드 n의 오른쪽 서브트리로 이동
- 즉, {왼쪽 자식 -> 부모 -> 오른쪽자식}
- 부모 입장에서 왼쪽자식 처리 후 자기자신(부모노드) 처리
- 아직 방문하지 않은 왼쪽자식이 있으면, 부모보다 먼저 처리
- 어떠한 부모-자식 쌍을 선택해도, 왼쪽자식이 부모보다 먼저 출력(처리)되는 특성이 있음
- 왼쪽 서브트리가 부모보다 먼저 출력(처리)됨

후위 순회(Postorder Traversal)
- 수행 방법 : 현재 노드 n의 왼쪽 서브트리로 이동 -> 현재 노드 n의 오른쪽 서브트리로 이동 -> 현재 노드 n에서 명령 수행
- 즉, {왼쪽 자식 -> 오른쪽 자식 -> 부모}
- 왼쪽자식, 오른쪽 자식 모두 처리한 뒤, 마지막에 부모 처리

이진 탐색 트리(Binary Search Tree)
: 이진 트리에 탐색을 위한 조건을 추가하여 정의한 자료구조
이진 탐색 트리의 정의
- 모든 원소는 서로 다른 유일한 키를 갖는다.
- 왼쪽 서브트리에 있는 원소의 키들은 그 루트의 키보다 작다.
- 오른쪽 서브트리에 있는 원소의 키들은 그 루트의 키보다 크다.
- 왼쪽 서브트리와 오른쪽 서브트리도 이진 탐색 트리이다.

이진 탐색 트리의 특성
- 평균 O(logN)의 시간 복잡도를 가지며, 트리가 한쪽으로 치우친 최악의 경우에는 O(N)의 시간 복잡도를 가진다.