728x90

트리의 개념

1. 트리의 정의

2. 노드의 종류

3. 트리의 용어

 

 

 

트리의 정의

- 루트 노드를 가지고 있고, 모든 노드들 사이에 단순 경로가 존재하는 비순환 연결 그래프

- 루트 노드 : 나무의 뿌리에 해당하는, 트리에 가장 높은 곳에 위치하는 노드

- 경로 : 노드에서 노드로 가는, 중복되지 않은 연결선들의 나열

- 단순 경로 : 시작과 끝노드가 중복되는것을 제외하고 노드가 중복되지 않는 경로

- 사이클 : 시작 노드와 끝 노드가 같은 경로

- 비순환 그래프 : 사이클이 존재하지 않는 그래프 -> 트리에는 루프가 없음

- 연결 그래프 : 서로 다른 모든 노드들 사이에 항상 경로가 있는 그래프

 

 

부모 노드

- 한단계 상위 노드

- 노드 A는 노드 B, C, D의 부모 노드

- 노드 B는 노드 E, F의 부모 노드

- 노드 D는 노드 G의 부모 노드

 

 

자식 노드

- 한단계 하위 노드

- 노드 B, C, D는 노드 A의 자식 노드

- 노드 E, F는 노드 B의 자식 노드

- 노드 G는 노드 D의 자식 노드

 

 

형제 노드

- 부모가 같은 노드

- 노드 B, C, D는 서로 형제 노드

- 노드 E, F는 서로 형제 노드

 

 

 

리프 노드

- 자식 노드가 없는 노드

- 노드 C, E, F, G는 리프 노드

 

중간 노드

- 루프 노드나 리프 노드가 아닌 노드

- 노드 B와 D는 중간 노드

 

조상 노드

- 루트 노드에서 임의의 한 노드에 이르는 경로에 포함된 모든 노드들

- 노드 A, B, E는 노드 H의 조상 노드

- 노드 A는 노드 D의 조상 노드

- 부모 노드는 조상 노드

- 루트 노드를 제외한 모든 노드는 조상 노드를 가짐

 

자손 노드

- 한 노드에서 임의의 리프 노드에 이르는 경로에 포함된 모든 노드들

- 노드 A의 자손 노드는 노드 B, C, D, E, F, G, H

- 자식 노드는 자손 노드임

 

 

서브 트리

- 임의의 한 노드를 루트 노드로 하는 트리

- 서브 트리의 개수 = 노드 개수

 

 

노드의 차수

- 노드의 차수 = 자식 노드의 개수

- A 노드 차수 = 3

- B 노드 차수 = 2

- C 노드 차수 = 0

- 트리에서의 노드의 차수 != 그래프에서의 노드의 차수

 

트리의 차수

- 각 노드의 차수의 최대값

- A 노드의 차수 = 3

- B 노드의 차수 = 2

- C 노드의 차수

=> 트리의 차수 = 3

- 트리의 차수 != 그래프의 차수

 

레벨

- 루트 노드는 레벨 0

- 자식 노드로 가면서 레벨이 한 단계 씩 증가

 

 

트리의 높이(또는 깊이)

- 트리의 최대 레벨

 

 

트리의 성질

1. 노드의 개수와 연결선 개수의 관계

2. 트리에 대한 정리

 

노드의 개수와 연결선의 개수 사이의 관계

- 트리의 노드의 개수를 v, 연결선 개수를 e라 하면

=> e = v - 1

 

 

2. 트리에 대한 정리

- n 개의 노드를 가지는 연결 그래프 T에 대해 다음은 동치임

- T는 트리이다.

- T의 연결선의 개수는 n - 1 이다.

- T에서 연결선을 하나 제거하면 단절 그래프가 된다.

- T의 임의의 한 노드에서 그 노드와 다른 노드로 가는 경로가 유일하게 존재한다.

 

 

 

 

이진 트리

1. 이진 트리의 정의

2. 이진 트리의 종류

3. 이진 트리의 표현

 

 

 

이진 트리 Binary Tree

- 차수가 2이하(자식 노드가 2개 이하)인 트리

 

 

이진 트리에 관한 정리

- 레벨 k에서 이진 트리가 가질 수 있는 최대 노드 수 = 2^k

- 높이가 m인 이진 트리가 가질수 있는 최대 노드 수 = 2^(m + 1) - 1

- 높이가 m인 이진 트리가 가질 수 있는 최소 노드 수 = m + 1

 

포화 이진 트리

- 모든 레벨에 노드가 꽉 차서 레벨을 늘이지 않는 이상 노드 추가가 더이상 불가능한 트리

- 높이가 h인 포화 이진 트리의 노드 수 = 2^(h + 1) -1

- 높이가 h인 포화 이진 트리의 리프 노드 수 = 2^h

 

 

 

완전 이진 트리

- 높이가 h일 때, 레벨 0 부터 레벨 h - 1까지의 노드로 이루어진 트리가 포화 이진 트리이고, 레벨 h에서는 왼쪽부터 노드가 채워진 트리

- 2^h <= 높이가 h인 완전 이진 트리의 노드 수 <= 2^(h + 1) - 1

 

편향 이진 트리 skwed binary tree

- 리프 노드를 제외한 모든 노드들이 왼쪽 자식 노드만을 가지고 있거나 아니면 모두 오른쪽 자식 노드만 가지고 있는 트리

- 높이가 h인 편향 이진 트리의 노드 수 = h + 1

 

배열을 이용한 구현

- 배열 : 같은 자료형을 가진 자료들을 메모리에 연속적으로 저장한 자료 구조

-> 인덱스(index)를 이용하여 저장된 자료에 접근 가능

 

 

배열을 이용한 이진 트리 구현

- 트리의 높이가 h면, 높 이가 h인 포화 이진 트리의 노드 번호를 배열의 인덱스로 사용하여 트리 표현

-> 인덱스 계산 편의성을 위해 루트 노드의 경우 인덱스 1을 사용

 

배열을 이용한 이진 트린 구현시 포화 이진 트리를 사용하는 경우의 장점

- 부모 노드의 인덱스가 n이면, 왼쪽 자식 노드의 인덱스는 2n, 오른쪽 자식 노드의 인덱스는 2n + 1

- 자식 노드의 인덱스가 이면 부모 노드의 인덱스 내림 (n/2) -> 내림(1.5) = 1, 내림(2.5) = 2

 

포화 이진 트리를 사용한 경우 단점

- 메모리 낭비가 발생

 

 

 

연결 리스트

- 데이터를 저장할때 다음 순서의 자료가 있는 위치(포인터)를 데이터에 포함시키는 방식으로 저장

 

연결 리스트를 이용한 구현

- 트리에서는 부모 노드와 자식 노드라는 관계가 존재

- 이를 위해 이중 연결 리스트를 사용

- 부모 노드를 나타내는 데이터에 자식 노드의 위치를 함께 저장

 

 

연결 리스트를 이용한 이진 트리 예시

 

 

 

 

300x250

'수학 > 알고리즘' 카테고리의 다른 글

이산 수학 - 17 순열과 조합  (0) 2020.06.09
이산 수학 - 16 트리 활용  (0) 2020.06.08
이산 수학 - 14 그래프의 활용  (0) 2020.06.08
이산 수학 - 13 그래프  (0) 2020.06.08
이산 수학 - 10 관계  (0) 2020.06.07

+ Recent posts