📌 선형 자료구조(Linear Data Structure)

일반적으로는 배열(array), 연결리스트
파이썬에서는 리스트, 튜플, 큐, 스택

하나의 자료 뒤에 하나의 자료만 있음

 

🔸특징

- 일직선으로 연결되어 있음
- 이전 - 현재 - 다음 (연속성)
- 각각 요소들이 매핑되어있음


🔸한계점

선형으로된 자료만 표현할 수 있음 == 계층에 대한 표현이 불가


📌 비선형 자료구조(NonLinear Data Structure)

하나의 자료 뒤에 여러 개의 자료가 있을 수 있음

데이터를 순차적으로 저장하지 않기 때문에 비선형 자료구조

 

계층형 자료구조


🔸 특징

- 한 가지의 소스에서 연결되어 있음
- 하나의 노드가 여러 노드로 전파됨
- 순환구조가 없음 (중요도 🌟🌟🌟)    (단순 순환을 갖지 않고, 연결된 무방향 그래프 구조임)

👉이걸 '트리'라고 함

 

🔸 조건

🥕조건 01
Node (or Vertes) : 값을 가지고 있는 기본 단위 객체
Edge : 상위 노드와 하위 노드 간의 연결하는 선(link)

🥕조건 02
Root : 트리의 맨 위에 있는 노드, 유일한 부모가 없는 노드
Leaf : 더 이상 자식 노드가 없는 최하위 노드
Internal : root와 left 사이의 내부 노드 

🥕조건 03
Parent : 해당 노드 바로 위에 있는 부모 노드
Child : 해당 노드 바로 아래에 있는 자식 노드
Sibling :동일한 부모를 가지고 있는 노드들

🥕조건 04
ancestor(each node -> root node) : 조상 노드
diancestor(root node -> each node) : 자손 노드

🥕조건 05
Sub Tree : 주어진 노드의 모든 하위 목록 (그 계층을 삼각형 틀로 보면 됨. ex. 나, 금쪽이, 우리 아빠)

🥕조건 06 (중요도🌟🌟🌟)
🌟degree of a node : 특정 노드가 가지고 있는 자식 노드의 수 (주의, 자식과 자손은 다름. 자손은 포함하지 않음)
🌟degree of a tree : 가장 높은 차수를 가진 노드의 차수(즉, 특정 노드가 가지고 있는 자식 노드의 수가 가장 많은 차수를 말함)

🥕조건 07 (중요도 🌟 🌟🌟)
Depth : 노드에서 루트까지의 edge 수
Height : 루트 노드와 가장 먼 leaf 사이의 edge 수
Level : depth + 1

depth of a node : root -> each node의 edge의 수(나뭇가지의 수)
🌟depth of a tree(height) : root -> 가장 깊은 node까지의 edge 수
width of a tree : 각 계층에서 node의 최대 node 수





🌲 Tree의 종류

🍃 Binary Tree(이진 트리)

🍃 Non-Binary Tree

 

🌲 이진 트리

🍃최대 자식의 수가 2임
🍃차수가 2임

 

🔸이진 트리 특징 (중요도🌟🌟🌟)

i번째 레벨의 최대 노드 수 : 2^(i-1)  (각 계층의 2의 제곱임)
깊이가 k인 이진 트리의 최대 노드 수 : 2^k - 1

 

🔸이진 트리의 종류

🌲포화 이진 트리
모든 노드가 0개 또는 2개의 자식 노드
- 모든 내부 모드는 두개의 자식 노드를 가져야함
- 모든 리프 노드는 동일한 깊이에 있어야함
- 모든 레벨의 노드가 모두 차있는 트리
- 노드의 수 = 2^depth - 1

🌲완전 이진 트리
마지막 레벨을 제외한 모든 레벨이 완전히 채워져있고
- 마지막 레벨의 노드들은 왼쪽에서 오른쪽으로 채워진 트리
(레프트차일드랑 라이트차일드가 다 있어야 됨. 라이트차일드만 있으면 완전 이진트리가 아님)


🌲트리의 순회
Search == Traversal (탐색 == 순회)
- 어떠한 값이 주어졌을 때 해당 값이 일치하는 노드가 있는지 보는 것
- 즉 모든 노드를 봐야함



🔸순회방법

 

🍎Depth-first search (DFS) (깊이 우선 탐색)

- 계층 순서대로 탐색 (할아버지 - 아버지 - 나)

- 트리의 한 경로를 끝까지 탐색한 후 다른 경로를 탐색하는 방법

- 스택, 재귀 이용하여 구현함


▼이진트리는 특히 세가지 방법으로 구현할 수 있음▼

🥕 Preorder Traversal (전위순회) (A - B - C) (루트 -> 왼쪽 -> 오른쪽)

👉A B D H I E C F G


🥕 Inorder Traversal (중위순회) (B - A - C) 왼쪽 -> 루트 -> 오른쪽

👉H D I B E A F C G


🥕 Postorder Traversal (후위순회) (B - C - A) 왼쪽 -> 오른쪽-> 루트

👉H I D E B F G C C A



💡전위, 중위, 후위가 헷갈리다면?  >>> "루트"에 집중할 것!
- 전위루트 > 왼쪽 > 오른쪽
- 중위는 왼쪽 > 루트 > 오른쪽
- 후위는 왼쪽 > 오른쪽 > 루트





 🍎Breadh-fist search (bfs) (너비)

- 계층별로 탐색 (나랑 금쪽이 계층, 아버지 형제들 계층, 할아버지 형제들 계층)

- 트리의 레벨순으로 노드 탐색

- 큐를 이용하여 구현함

+ Recent posts