2
트리 기본
트리는 무엇인가?
내가 알고 있는 트리? 그 트리가 맞는 건가?1
트리 자료구조를 사용하는 이유는 뭘까?
그럴려면 우선, 트리를 알아야 한다.
자 ~ 이제 시작이야!
3
트리 기본
트리는 무엇인가?
내가 알고 있는 트리? 그 트리가 맞는 건가?1
트리란? 내가 알고 여러분도 아는 그 트리
조건이 있습니다.
(이 내용을 이해하기 위한 Node의 개념을 숙지하고 계셔야 합니다.)
4
트리 기본
트리는 무엇인가?
내가 알고 있는 트리? 그 트리가 맞는 건가?1
바로, 트리는 1개 이상의 노드를 갖는 집합으로 다음 조건을 만족합니다.
01 트리에는 루트라고 불리는 특별난 녀석이 있습니다.
02 다른 노드들은 원소가 중복되지 않는 n개의 부속 트리로 나누어지며,
각각은 루트의 부속 트리라 부릅니다.
6
트리 기본
트리는 무엇인가?
내가 알고 있는 트리? 그 트리가 맞는 건가?1
트리 구조는 왜 필요할까요 ?
트리는 계층형 구조를 표현하는데
가장 효율적인 구조이다.
바꿔 말하면, 선형 리스트로 계층형 구조를 잘 표현 할 수 있을까요?
No!!
7
트리 기본
트리는 무엇인가?
내가 알고 있는 트리? 그 트리가 맞는 건가?1
어디에서 쓰일 수 있을까요?
01 게시판
02 DNS 서버 계층도
03 회사 네트워크 망
8
트리 기본
트리는 무엇인가?
내가 알고 있는 트리? 그 트리가 맞는 건가?1
어디에서 쓰일 수 있을까요?
01 게시판
계층형 게시판(답글)이 가능한 경우
트리 형태로 표현이 가능하다.
사실, DB에서 데이터 자체를 트리 형태로
구조화 시킨 뒤 가져 올 수 있을 것 같다.
(Oracle 계층형 쿼리의 예를 들자면..)
9
트리 기본
트리는 무엇인가?
내가 알고 있는 트리? 그 트리가 맞는 건가?1
어디에서 쓰일 수 있을까요?
DNS가 뭘 하는지는 아시나요?
컴퓨터는 2진수만 읽고 쓰고 합니다.
www.naver.com 이 주소를 알까요?
모릅니다. 그래서 필요한 녀석이 DNS입니다.
02 DNS 서버 계층도
10
트리 기본
트리는 무엇인가?
내가 알고 있는 트리? 그 트리가 맞는 건가?1
실제 IP주소를 www.naver.com 으로
변환/알려주는 녀석이 DNS라고 합니다.
(사설이 길었네요….)
DNS서버는 해킹 된 적이 없다고 합니다.
(용기가 생기시더라도 참아주세요.)
12
트리 기본
트리는 무엇인가?
내가 알고 있는 트리? 그 트리가 맞는 건가?1
Sibling : 부모가 같은 자식 노드
Ancestor : 노드의 부모 노드들의 총 집합
Descendant : 노드의 부속 트리에 있는 모든 노드들
Level : 루트로부터의 거리(루트 노드 레벨 = 0)
Height : 루트노드로 부터 가장 긴 경로의
잎노드의 레벨 + 1
Degree : 노드의 부속 트리의 개수
Degree of tree : 트리의 최대 차수
Leaf(Terminal): 차수가 0인 노드,
결국 맨 끝에 달려 있어서 자식이 없는 노드
Internal(Non-terminal): 차수가 1 이상인 노드
Parent : 부속 트리를 가진 노드
Child : 부모에 속하는 부속 노드
19
트리심화
트리면 트리지, 무슨 또 심화란 말인가…
공부할게 이렇게 많아서야 원…2
부모 노드 위치 :
parent(i) = (i-1)/2
parent(i) = 0 if I = 0 (루트 노드는 부모가 없다.)
왼쪽 노드 : left(i) = 2 * i + 1
오른쪽 노드 : right(i) = 2 * i + 2;
[8]
[7]
[6]
[5]
[4]
[3]
[2]
[1]
[0] A
B
C
D
E
F
G
H
I
위 배열을 가지고 트리를 표현 해보시기 바랍니다.
22
트리 순회(Traverse)
트리의 순회라니!!!
난 그런거 모른다.3
Depth-first-traversal(DFS)
깊이 우선 탐색은 왼쪽 그림처럼 동작합니다.
물론, Order에 따라 출력 형태는 달라질 수 있습니다.
DFS는 무조건 깊이 우선! 선택이므로, 가장 깊이 간 뒤
부모로 되돌아오는 행동을 취하며, 순회를 합니다.
이때, 부모로 되돌아 오는 행동을 Backtracking이라 함.
23
트리 순회(Traverse)
트리의 순회라니!!!
난 그런거 모른다.3
Breadth-first-traversal(BFS)
너비 우선 탐색은 왼쪽 그림처럼 동작합니다.
즉, 트리의 레벨 단위로 순회를 하는 구조입니다.
BFS는 큐를 통해 구현이 가능합니다.
어떻게? 왜 큐를 쓸까요? – 고민 해보기