Language 자료구조 Part7. "트리" - 기본편

황제낙엽 2007.11.24 05:47 조회 수 : 22 추천:114

sitelink1  
sitelink2  
sitelink3  
sitelink4  
sitelink5  
extra_vars6  
http://blog.naver.com/simtwolove?Redirect=Log&logNo=30022013436
자료구조가 무엇인지는 본 블로그의 "자료구조알고리즘" 항목의
 
첫번째 글에 자료구조에 대한 설명이 대략 있음을 알린다.
 
 
Part7 트리 - 트리의 기본. 용어 및 사용하는 때.
--------------------------------------
오랜만에 글 올리네요..
 
오늘 배워 볼 트리는 정말 어려운 자료구조 중 하나입니다.
 
자 그럼 공부해 봅시다~
 
선린 인터넷 고등학교 20420 전호근.
--------------------------------------
 
이 전에 배운 동적배열, 연결리스트, 스택, 큐는 모두 선형적인 구조를 가지는데 비해,
 
트리는 비선형 자료구조( Non-Linear ) 라고 한다.
 
이 전에 배운 자료구조들은 1차원의 선형구조를 가지는 데 비해,
 
트리는 2차원이다.

그림과 같이 2차원의 구조라는걸 알 수 있다.
 
트리는 입체적인 구조 때문에, 이전에 배운 자료구조들보다 구현과 사용이 어렵다.
 
또, 스택이나 연결 리스트처럼 구현 방법이 정형화되어 있지 않고 적용하는 알고리즘에 따라 천차 만별로 모양이 달라져 응용력을 필요로 하기도 한다.
 
하지만, 2차적인만큼, 자료의 입출력 및 검색이 상당히 빠르고,
 
용량이 커지더라도 속도에 아주 큰 영향은 받지 않는 장점이 트리를 사용케 하는 큰 장점이다.
아래 그림을 보자.

와 같이 검색이 빠르다. (이진검색과 비슷한 이치이다.)
 
그 외에도 어느 정도 규모가 있고 복잡한 데이터를 다룰 때는 주로 트리가 사용되는데
 
토너먼저 대진표 등과 같이 계층적인 자료들을 다룰 때도 트리가 가장 어울린다.
 
 
트리는 말 그대로 나무 이므로, 트리를 구성하는 요소들 및 용어들은 대부분
 
나무의 각 부분들의 용어를 따온 경우가 많으므로 이해하긴 쉬울 것이다.
 
단, 진짜 나무는 뿌리가 아래에 있지만, 프로그래밍의 트리구조는 뿌리가 위에있다는 점
(나무를 거꾸로 뒤집은 상태)의 차이점은 있다.
 
위 그림을 보다시피 동그라미는 노드라고 하는데, 연결리스트와 같다.
 
노드는 노드를 연결하는 링크(Link)를 가진다.
 
단, 트리에선 노드라는 용어대신 버텍스(vertex) , 링크라는 용어대신 엣지(edge)라는 용어를 사용하기도 한다.
 
아래 그림을 보고 더 많은 용어를 공부해 보자.

1. 트리의 기본이 되는 최상층의 노드를 루트 (뿌리) 라고 한다.
모든 트리는 단 하나의 유일한 루트를 가지며, 아래로 무수한 노드를 가지게 된다.
 
2. 최상위 노드부터 1 , 2, 3, 4 단계로 나뉘는데, 이것을 레벨이라고 부른다.
 최상위 즉, 루트는 1레벨. 그 아래 B, C 는 2레벨, 그 아래 3, 그 아래를 4레벨이라 부른다.
 C 언어는 모든 숫자를 0부터 시작하지만 트리의 레벨은 1부터 시작(One Base)한다  또, 최고 레벨인 4를 이 트리의 높이라고한다. 즉 이 트리의 높이는 4 이다.
 
3. 트리를 구성하는 노드 중, 아래쪽의 노드를 자식이라고 하며 위쪽의 노드를 부모라고 한다.
 위 그림에서 B, C는 A의 자식이며 D, E, F의 부모는 B이다.
 같은 부모를 가진 노드들을 형제라고 하는데 G, H는 공동의 부모 C에 소속되어 있으므로 형제 관계이다. 
 직속 관계가 아니더라도 아래쪽에 있으면 후손이며 위쪽에 있으면 선조라고 한다. 
 
4. 경로(Path)란 특정 노드에서 다른 노드로 가는 길이다.
 어떤 하나의 노드에서 다른 노드로 가는 길은 단 하나뿐이다.
 왜냐하면, 두 노드의 공동의 선조까지 올라간 후 다시 아래로 내려가야 하기 때문이다.
 I에서 K로 가는 경로는 I-D-B-F-K 단 하나밖에 없다.
 
5. 차수(Degree)는 자식 노드의 개수인데 B의 차수는 3, C의 차수는 2, M의 차수는 0이다.
 차수가 0인 노드, 즉, 자식이 하나도 없는 노드를 잎(Leaf) 노드 또는 외부(External) 노드라고 하며
 자식이 있는 노드를 내부(Internal) 노드라고 한다.
 
6.
순서트리(Ordered Tree) 비순서 트리(Oriented Tree).

위 그림과 같은 두개의 트리에서 모두 A 밑에 B, C를 자식으로 가지는데,
 
순서트리(Ordered Tree)라면 이 둘은 다른것이고, 비순서 트리(Oriented Tree)라면 이 둘은 같은 것이다.
순서트리란, 순서가 있는 트리, 비순서 트리란 순서가 의미가 없는 트리를 말한다.
 
7. 순회 : Order.
 순회 방법 -
 - 1. 전위순회 ( PreOrder )
 - 2. 중위순회 ( InOrder )
 - 3. 후위순회 ( PostOrder )
 - 4. 레벨순회 ( levelOrder )
순회는 다음 강의에서 알아보자.
 
 
마지막으로, 트리를 구성하는 작은 트리를 서브 트리(Sub Tree)라고 하며,
트리가 여러개 모인것은 포레스트(forest)라고 하는데, 나무가 모여 숲은 이루는 것과 같은 이치이다.

번호 제목 글쓴이 날짜 조회 수
공지 2023 Software Development Trend 정리 황제낙엽 2024.01.19 1
» 자료구조 Part7. "트리" - 기본편 황제낙엽 2007.11.24 22
47 자료구조 Part6. "연결리스트로 구현한 스택"의 모든 것 황제낙엽 2007.11.24 39
46 자료구조 Part5. "연결리스트로 구현한 큐"의 모든 것 황제낙엽 2007.11.24 28
45 자료구조-쉬어가기. (스택과 큐가 쓰이는 기본적인 예) 황제낙엽 2007.11.24 23
44 자료구조 Part4. "연결리스트"의 모든 것. (1) file 황제낙엽 2007.11.24 49
43 자료구조 Part3. "스택"의 모든 것. 황제낙엽 2007.11.24 103
42 자료구조 Part2. "큐"의 모든 것. 황제낙엽 2007.11.24 18
41 자료구조 Part1. "동적배열"의 모든 것. 황제낙엽 2007.11.24 431
40 자료구조에 대해. (1. 기초편) 황제낙엽 2007.11.24 10
39 Web 2.0이란 무엇인가 : 다음 세대 소프트웨어를 위한 디자인 패턴 및 비즈니스 모델(3 - 완결) 황제낙엽 2007.11.20 68
38 Web 2.0이란 무엇인가 : 다음 세대 소프트웨어를 위한 디자인 패턴 및 비즈니스 모델(2) 황제낙엽 2007.11.20 383
37 Web 2.0이란 무엇인가 : 다음 세대 소프트웨어를 위한 디자인 패턴 및 비즈니스 모델(1) 황제낙엽 2007.11.20 74
36 Fault Tolerant 컴퓨터 시스템의 개요 황제낙엽 2007.11.02 57
35 Fault Tolerant 의 정의 황제낙엽 2007.11.01 44
34 XML-RPC HOWTO 황제낙엽 2007.08.27 81
33 SSO(Single Sign On) vs SLO(Sing LogOn) 차이점 황제낙엽 2007.08.17 359
32 실무를 통해 분석해 본 오픈 프레임워크 활용 예 황제낙엽 2007.07.20 78
31 phpBB2 설치가이드 황제낙엽 2007.03.03 82
30 오픈 소스와 소프트웨어 개발의 전반적인 개념 확립 황제낙엽 2007.01.30 72
29 텍스트 효과 황제낙엽 2006.09.09 11