Tree

seonghun park·2022년 4월 11일
1

Tree란?

앞서 다루었던 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)는 경로에 속한 엣지의 수를 나타낸다.


Tree ADT

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(): 해당 노드가 단말인지 아닌지 확인


Tree의 순회방식

preorder Traversal(전위 순회): 루트를 먼저 방문

postorder Traversal(후위 순회): 루트를 마지막에 방문

inorder Traversal(중위 순회): 왼쪽 먼저 방문

Euler Tour Traversal(오일러 투어)

  • 방문하는 노드를 무조건 처리함. 한쪽 벽에 손을 대고 미로를 다니는 느낌
  • prorder, inorder, postorder 방식이 섞인 순회


트리의 종류

Arithmetic Expression Tree: 연산트리

  • internal nodes: 연산자
  • external nodes: 피연산자

Decision Tree: 결정 트리

  • internal nodes: questions with yes/no answer
  • external nodes: decisions

Binary trees

  • 각 노드는 최대 두개의 자식노드를 가질 수 있다.
  • intenal 노드의 자식 노드를 각각 left child 와 right child라고 한다.

---Binary Tree Type---

  • Full(proper) binary trees
    각 노드는 0 또는 2개의 자식을 가질 수 있음.

  • Complete binary trees
    가장 낮은 레벨을 제외한 모든 레벨의 노드가 꽉 차있음.

  • Perfect binary trees
    마지막 레벨까지 모두 꽉 차있음.

  • Balanced binary trees
    왼쪽과 오른쪽 서브트리의 각 노드의 최대 차이가 1이다. (보류)

  • Degenerate binary trees
    구조가 깨진 트리
    모든 인터널 노드는 하나의 자식노드만 갖는다.


Structure for Binary Tree


배열기반 이진트리

배열의 rank 규칙

  • 배열 기반에서 루트노드의 랭크는 1이다.
  • 이후로 같은 레벨의 왼쪽에서 오른쪽으로 랭크를 매긴다.
  • 어떤 노드가 부모 노드의 left child라고 하면
    rank = 2 * rank(부모노드)
  • 어떤 노드가 부모 노드의 right child라고 하면
    rank = 2 * rank(부모노드) + 1

단점: element를 저장하고 있지 않는 빈공간이 생길 수 있다.

profile
hun의 PS 블로그입니다:)

2개의 댓글

comment-user-thumbnail
2022년 4월 11일

잘 보고 갑니다 :)

1개의 답글