비선형자료구조 - 트리&DFS&BFS) 복습을 위해 작성하는 글 2023-04-09

rizz·2023년 4월 9일
0

자료구조

목록 보기
7/12

📒 갈무리 - 트리(Tree)

📌 비선형 자료구조란?

- 자료의 순서가 불규칙하고 자료 간의 연결이 여러 줄로 연결된 자료구조

- 하나의 자료 뒤에 여러 개의 자료가 존재할 수 있다.

ex) 관계도, 지하철 노선도, 도로망 등 계층적 구조

 

📌 트리란?

- 노드(Node)로 이루어진 자료구조

- 하나의 루트 노드를 갖는다.

- 루트 노드는 0개 이상의 자식 노드를 갖고 있다.

- 그 자식 노드 또한 0개 이상의 자식 노드를 갖고 있고, 이는 반복적으로 정의된다.

- 모든 자식 노드는 한 개의 부모 노드만을 갖는다.

- 각 노드는 어떠한 자료형으로도 표현이 가능하다.

 

📌 트리와 관련된 용어

루트 노드(Root Node) : 부모가 없는 노드

리프 노드(Leaf Node) : 자식이 없는 노드이며 '단말 노드'라고도 한다.

형제 : 같은 부모를 갖는 노드

간선(Edge) : 노드들을 연결하는 선이라 하며 'Link'또는 'branch'라고도 한다.

노드의 깊이(Depth) : 루트 노드에서 어떤 노드에 도달하기 위해 거처야 하는 간선의 수

노드의 레벨(Level) : 트리의 특정 깊이를 가지는 노드의 집합(루트 노드가 레벨 0)

노드의 차수(Degree) : 하위 트리 개수 / 간선 수 = 각 노드가 지닌 가지의 수

트리의 높이(Height) : 루트 노드에서 가장 깊숙이 있는 노드의 깊이

 

📌 트리의 특징

- 그래프의 한 종류이다.

- 아래로만 갈 수 있는 그래프 종류 중 하나이다.

- 계층 모델이다.

- DAN의 한 종류이다.

DAN(Directed Acycle Graphs) : 방향성이 있는 비순환 그래프

- 노드가 N개인 트리는 N-1개의 간선(Edge)을 갖는다.

- 임의의 노드에서 어떤 노드로 가는 경로는 유일하다. (사이클이 없기 때문)

- 한 개의 루트 노드만이 존재하고, 모든 자식 노드는 한 개의 부모 노드만을 갖는다.

- 부모 자식 관계이기 때문에 흐름은 Top->Bottom 또는 Bottom -> Top으로 이루어 진다.

- 순회(Traversal)는 Pre-order(전위), In-order(중위) 또는 Post-order(후위)로 이루어진다. 이 3가지 모두 깊이 우선 탐색(DFS)과 넓이 우선 탐색(BFS) 안에 있다.

- 트리의 종류는 이진 트리, 이진 탐색 트리, 균형 트리, 이진 힙등이 있다.

 

📌 이진 트리(Binary Tree)

- 컴퓨터에서 사용되는 데이터 구조의 하나로, 루트가 있는 트리 구조에서 각 노드의 자식의 수가 최대 2개를 넘지 않는 트리이다.

 

📌 이진 트리의 종류

포화 이진 트리 : 모든 레벨의 노드가 꽉 차있고, 단말 노드를 제외한 모든 노드의 차수가 이진 트리의 형식인 이진 트리

완전 이진 트리 : 왼쪽부터 모두 채워진 이진 트리

높이 균형 트리 : 모든 단말 노드의 깊이 차이가 최대 1인 이진 트리

완전 높이 균형 트리 : 왼쪽 하위 트리와 오른쪽 하위 트리의 깊이가 같은 이진 트리

 

📌 이진 트리의 순회(Traversal)

- 이진 트리의 모든 노드를 특정한 순서대로 한 번씩 방문하는 것

 

📌 전위 순회

- 루트 노드에서 시작하여 항상 왼쪽 자식 노드를 우선 적으로 방문하는 순회

루트 노드 -> 왼쪽 서브 트리 -> 오른쪽 서브 트리

위 사진을 순회한다면,

1 -> 2 -> 4 -> 5 -> 6 -> 3

📌 중위 순회

- 루트 노드를 먼저 방문하지 않고 왼쪽 서브 트리부터 방문하여 루트 노드가 중간에 방문되는 순회

왼쪽 서브 트리 -> 루트 노드 -> 오른쪽 서브 트리

위 사진을 순회한다면,

4 -> 2 -> 5 -> 6 -> 1 -> 3

📌 후위 순회

- 왼쪽 서브 트리와 오른쪽 서브 트리를 우선적으로 방문한 후 가장 마지막으로 루트 노드를 방문하는 순회

왼쪽 서브 트리 -> 오른쪽 서브 트리 -> 루트 노드

위 사진을 순회한다면,

4 -> 6 -> 5 -> 2 -> 3 -> 1

 

📌 이진 트리 DFS, BFS

- 이진 트리의 순회는 전위, 중위, 아니면, 후위 순회로 이루어지고 3가지 모두 DFS(깊이 우선 탐색)와 BFS(넓이 우선 탐색)안에 있다.

- DFS가 BFS보다 좀 더 간단하다.

- 속도는 DFS가 BFS보다 느리다.

- 최대한 깊이 내려간 뒤, 더 이상 갈 곳이 없을 경우 옆으로 이동

위 사진을 깊이 우선 탐색한다면,

1 -> 2 -> 4 -> 5 -> 6 -> 3

- 스택 또는 재귀 호출로 구현

- 검색 대상 그래프가 크다면 DFS를 고려

- 왼쪽부터 최대한 넓게 이동한 후, 더 이상 갈 수 없을 때 아래로 이동

위 사진을 넓이 우선 탐색한다면,

1 -> 2 -> 3 -> 4 -> 5 -> 6

- 큐를 이용해서 구현

- 최단 경로를 찾아야 할 경우에 사용

- 검색 대상의 규모가 크지 않고, 검색 시작 지점으로부터 원하는 대상이 멀지 않다면 BFS를 고려

 

💡 TIP

모든 정점을 방문하고자 하는 경우는 DFS, BFS 중 무엇을 사용하여 구현하든 상관없다.

profile
복습하기 위해 쓰는 글

0개의 댓글