앞서 다루었던 Array, Linked Listm Stack, Queue는 모두 Linear 구조를 띄고 있다.
지금부터 다룰 Tree는 이와 다르게 계층적인 구조(이름과 같이 나무처럼)를 띄는 추상모델이다.
트리는 부모-자식관계의 노드들로 구성되어 있다.
트리의 적용
먼저 트리를 배우기에 앞서 기본 용어들에 대하여 알아보자.
Root: 부모가 없는 노드. 즉, 최상위 노드. ( Depth = 0 )
Internal node: child가 적어도 하나가 있는 노드
External node(leaf): 자식이 없는 노드. 단말 노드( 맨 끝 ).
Ancestors of a node: 한 노드의 모든 상위 노드. ( itself, parent, grandparent, great-grandparent etc. )
Depth of a node: 한 노드의 조상 수(가지수)
Height of a tree: 한 트리의 노드 중 Depth의 최댓값
Descendant of a node: 한 노드의 모든 하위노드.( itself, child, grandchild etc.
Subtree : 한 노드와 그 노드의 모든 후손으로 구성된 트리
Edge(u,v): u노드와 v노드 사이를 이어주는 선. 여기서 u가 상위노드(부모)이다.
Path(v1, v2, v3,...): 엣지로 연결된 노드들로 이뤄진 시퀀스(sequence).
경로의 길이(length)는 경로에 속한 엣지의 수를 나타낸다.
Generic methods:
size( )
empty( )
Accessor methods:
Node root( ): 루트 노드의 포지션(위치)을 리턴 - empty상태면 error를 리턴
list nodes()/positions(): 전체 노드의 포지션을 list 형식으로 리턴
Node-based methods:
Node p.parent() - 해당 노드의 부모 노드 포지션 리턴 - 해당 노드가 root라면 에러 리턴.
list p.children() - 해당 노드의 자식 노드 list 형식으로 리턴
쿼리 methods:
bool isRoot(): 해당 노드가 루트인지 아닌지 확인
bool isExternal(): 해당 노드가 단말인지 아닌지 확인
Full(proper) binary trees
각 노드는 0 또는 2개의 자식을 가질 수 있음.
Complete binary trees
가장 낮은 레벨을 제외한 모든 레벨의 노드가 꽉 차있음.
Perfect binary trees
마지막 레벨까지 모두 꽉 차있음.
Balanced binary trees
왼쪽과 오른쪽 서브트리의 각 노드의 최대 차이가 1이다. (보류)
Degenerate binary trees
구조가 깨진 트리
모든 인터널 노드는 하나의 자식노드만 갖는다.
단점: element를 저장하고 있지 않는 빈공간이 생길 수 있다.
잘 보고 갑니다 :)