선형/비선형 자료구조
- 선형 자료구조
- 리스트, 스택, 큐와 같이 데이터 집합을 한 줄로 늘어 세운 구조
- 비선형 자료구조
- 트리(Tree)는 데이터 집합을 여러 갈래로 나누어 세운 비선형 구조
- 삽입, 삭제, 검색에 대해서 선형 구조보다 나은 시간적 효율을 보임
트리
- 일반트리
- 이진트리
- 최대 두 개까지의 자식노드를 가질 수 있는 트리
일반트리의 이진트리 변환
- 일반트리에서는 자식노드의 수가 몇 개가 있는지 예측 불가하여 컴퓨터로 표현하기 어려움
- 모든 일반 트리는 이진 트리로 바꾸어 표현 가능
- 왼쪽자식노드-오른쪽형제노드 방법
이진트리의 종류
- 포화 이진트리
- 리프노드를 제외한 모든 노드의 자식은 2개
- 완전 이진트리
- 모든 노드의 자식은 0개 또는 2개
- skew 이진트리
- 한 쪽으로 치우친 트리
이진트리의 저장
- 배열
- 완전 이진트리의 경우
- skewed 이진트리의 경우
- 배열의 단점
- 배열의 이용하지 않는 저장 공간이 많다.
- 트리의 최대 깊이를 대비하여 기억장소를 확보하기 때문에 메모리 사용량이 많고, 확보한 기억장소보다 트리를 확장할 수 없다.
- 링크드리스트
이진트리의 순회(Traversal)
- 전위순회(Preoder Traversal)
- 방문 순서: G, C, A, E, L
void PreOrder (Nptr T) { if (T != NULL) { Visit(T->Name); PreOrder(T->LChild); PreOrder(T->RChild); } }
- 중위순회(Inoder Traversal)
- 방문 순서: A, C, E, G, L
void InOrder (Nptr T) { if (T != NULL) { InOrder(T->LChild); Visit(T->Name); InOrder(T->RChild); } }
- 후위순회(Postorder Traversal)
- 방문 순서: A, E, C, L, G
void PostOrder (Nptr T) { if (T != NULL) { PostOrder(T->LChild); PostOrder(T->RChild); Visit(T->Name); } }
Reference
- http://dblab.duksung.ac.kr/ds/pdf/Chap08.pdf
- http://www.google.co.kr/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CC8QFjAA&url=http%3A%2F%2Flink.koreatech.ac.kr%2Fcourses%2F2007_1%2FDS%2FLecture10-1.ppt&ei=AmZwU-WdOcKk8AXsu4CgAg&usg=AFQjCNGbcyfAtUWzlX0I0R6iZncOuo_F0A&sig2=25sWoGvRYgdcnYhme8PMfw&bvm=bv.66330100,d.dGI&cad=rjt