목차
📌 트리는 정점(Node, 노드)과 선분(Branch, 가지)을 이용하여 사이클을 이루지 않도록 구성한 그래프(Graph)의 특수한 형태이다.
📌 트리를 구성하는 각 노드들을 찾아가는 방법을 운행법(Traversal)이라 한다.
🔔 예제) 다음 트리를 Inorder, Preorder, Postorder 방법으로 운행했을 때 각 노드를 방문한 순서는 ?
💡 풀이 ? 서브트리를 하나의 노드로 생각할 수 있도록 그림과 같이 서브트리 단위로 묶는다. Preorder, Inorder, Postorder 모두 공통으로 사용한다.
- Preorder는 Root > Left > Right 이므로 A13이 된다.
- 1은 B2E이므로 AB2E3이 된다.
- 2는 DHI이브로 ABDHIE3이 된다.
- 3은 CFG이므로 ABDHIECFG가 된다.
방문 순서 : ABDHIECFG
💡 풀이 ?
- Inorder는 Left > Root > Right 이므로 1A3이 된다.
- 1은 2BE이브로 2BEA3이 된다.
- 2는 HDI이므로 HDIBEA3이 된다.
- 3은 FCG이브로 HDIBEAFCG가 된다.
방문 순서 : HDIBEAFCG
💡 풀이 ?
- Postorder는 Left > Right > Root이므로 13A가 된다.
- 1은 2EB이므로 2EB3A가 된다.
- 2는 HID이므로 HIDEB3A가 된다.
- 3은 FGC이므로 HIDEBFGCA가 된다.
방문 순서 : HIDEBFGCA
📌 산술식을 계산하기 위해 기억공간에 기억시키는 방법으로 이진 트리를 많이 사용한다. 이진 트리로 만들어진 수식을 인오더, 프리오더, 포스트오더로 운행하면 각각 중위(Infix), 전위(Prefix), 후위(Postfix) 표기법이 된다.
📌 Infix 표기를 Postfix, Prefix로 바꾸기
X = A / B * (C + D) + E
💡 [풀이] Prefix로 변환하기
(X = (((A / B) * (C + D)) + E))
prefix 표기 : = x +*/ AB + CDE
X = A / B * (C + D) + E
💡 [풀이] Postfix로 변환하기
(X = (((A / B) * (C + D)) + E))
Postfix 표기 : XAB / CD +* E +=
📌 Postfix나 Prefix로 표기된 수식을 Infix로 바꾸기
A B C - / D E F + * +
💡 [풀이] Postfix는 Infix 표기법에서 연산자를 해당 피연산자 두 개의 뒤로 이동한 것이므로 연산자를 다시 해당 피연산자 두 개의 가운데로 옮기면 된다.
((A (B C -) /) (D (EF +) * ) + )
((A / (B - C)) + (D * (E + F))) => A / (B-C) + D * (E + F)
+ / A - B C * D + E F
💡 [풀이] Prefix는 Infix 표기법에서 연산자를 해당 피연산자 두 개의 앞으로 이동한 것이므로 연산자를 다시 해당 피연사자 두 개의 가운데로 옮기면 된다.
(+(/ A (- B C) ) (* D (+ E F)))
((A / (B-C)) + (D * (E+F))) => A / (B - C) + D * (E+F)
📌 데이터 입, 출력 구현 - 검색 : 이분 검색/해싱 (4) | 2024.02.05 |
---|---|
📌 데이터 입, 출력 구현 - 정렬(Sort) (0) | 2024.02.01 |
📌 데이터 입, 출력 구현 - 자료 구조 (0) | 2024.02.01 |
📌 인터페이스 설계 - 미들웨어 솔루션 명세 (0) | 2024.02.01 |
📌 인터페이스 설계 - 시스템 인터페이스 설계서 작성 (0) | 2024.02.01 |