1. 트리의 운행법
- 트리를 구성하는 각 노드들을 찾아가는 방법을 운행법(Traversal)이라 한다.
- 이진 트리를 운행하는 방법은 산술식의 표기법과 연관성을 갖는다.
- 이진트리의 운행법은 세 가지가 있따
- Preorder 운행 : Root -> Left -> Right
- Inorder 운행 : Left -> Root -> Right
- Postorder 운행 : Left -> Right -> Root
- 예제)
- Preorder : A B D H I E C F G
- Inorder : H D I B E A F C G
- Postorder : H I D E B F G C A
2. 수식의 표기법
- 산술을 계산하기 위해 기억공간에 기억시키는 방법으로 이진 트리를 많이 사용한다. 이진 트리로 만들어진 수식을 인오더, 프리오더, 포스트오더로 운행하면 각각 중위(Infix), 전위(Prefix), 후위(Postfix) 표기법이 된다.
- 전위 표기법(PreFix) : 연산자 -> Left -> Right (+AB)
- 중위 표기법(InFix) : Left -> 연산자 -> Right (A+B)
- 후위 표기법(PostFix) : Left -> Right -> 연산자 (AB+)
1) Infix 표기를 Prefix로 변환하기
X = A / B * (C + D) + E
(X = (((A / B) * (C + D))+E)) : 연산 우선순위에 따라 괄호로 묶는다.
=(X+(*(/(A B)+(C D))E)) : 연산자를 해당 괄호 앞으로 옮긴다.
=X+*/AB+CDE : 필요없는 괄호를 제거한다
2) Infix 표기를 Postfix로 변환하기
X = A / B * (C + D) + E
(X = (((A / B) * (C + D))+E)) : 연산 우선순위에 따라 괄호로 묶는다.
((A (B C -) /) (D (E F +) *) +) : 먼저 인접한 피연산자 두 개와 오른쪽 연산자를 괄호로 묶는다.
((A / (B - C)) + (D * (E + F))) : 연산자를 해당 피연산자의 가운데로 이동시킨다
A / (B - C) + D * (E + F) : 필요 없는 괄호를 제거한다.
4) Prefix 표기를 Infix로 변환하기
+ / A - B C * D + E F
(+ (/ A (- B C)) (* D (+ E F))) : 먼저 인접한 피연산자 두 개와 왼쪽 연산자를 괄호로 묶는다.
((A / (B - C)) + (D * (E + F))) : 연산자를 해당 피연산자의 가운데로 이동시킨다
A / (B - C) + D * (E + F) : 필요 없는 괄호를 제거한다.
3. 스레드 이진트리(Threaded Binary Tree)
- 스레드 이진 트리는 이진 트리(Binary Tree)에서 발생하는 널(Null) 링크를 트리 운행에 필요한 다른 노드의 포인터로 사용하도록 고안된 트리를 말한다.
- 이진 트리를 이중 연결 리스트(Doubly Linked List)로 표현할 때 임의의 노드에 대한 자식 노드가 없는 부분의 링크 포인터로 Nil Pointer를 기억시키게 된다.
- 스레드 이진 트리 표현 방법
- 어떤 노드의 왼쪽 링크 포인터가 Nil이면 그 노드의 직전에 검사된 노드를 가리키는 포인터로 사용하고, 오른쪽 링크 포인터가 Nil이면 그 노드의 직후에 검사될 노드를 가리키는 포인터로 사용한다.
- 해당 노드의 직전, 직후 노드는 트리의 운행봅(Traversal)에 따라 방문한 노드의 순서대로 결정한다.
'BASIC > DataStructure' 카테고리의 다른 글
[자료구조] 파일 편성 (0) | 2018.02.24 |
---|---|
[자료구조] 검색-해싱(Hashing) (0) | 2018.02.23 |
[자료구조] 내부 정렬 (0) | 2018.02.22 |
[자료구조] 트리(Tree) (0) | 2018.02.22 |
[자료구조] 스택(Stack) (0) | 2018.02.22 |