트리 ( Tree )

그래프의 일종으로, 여러 노드가 한개의 노드를 가리킬 수 없는 구조

선형구조가 아닌 (비선형), 부모자식의 관계를 가지는 계층형 구조

개념


  • Node (노드) : 트리를 구성하고 있는 각각의 요소를 의미한다.

  • Edge (간선) : 트리를 구성하기 위해 노드와 노드를 연결하는 선을 의미한다.

  • Root Node (루트 노드) : 트리 구조에서 최상위에 있는 노드를 의미한다.

  • Terminal Node ( = leaf Node, 단말 노드) : 하위에 다른 노드가 연결되어 있지 않은 노드를 의미한다.

  • Internal Node (내부노드, 비단말 노드) : 단말 노드를 제외한 모든 노드로 루트 노드를 포함한다.

종류


- Binary tree  : 부모 노드가 자식 노드를 최대 2개씩만 갖는 트리

- Ternary tree : 자식 노드를 2개 이상 갖고 있는 트리

✔ 완전 이진 트리 (Complete binary tree)

마지막 레벨을 제외한 모든 서브트리의 레벨이 같아야 하고, 마지막 레벨은 왼쪽부터 채워져 있어야 한다.

✔ 정 이진 트리 (Full binary tree)

자식 노드가 없거나 2개인 트리

✔ 포화 이진 트리 (Perfect binary tree)

빈 공간이 없이 모든 노드2개의 자식을 갖고 있는 트리

✔ 이진 탐색 트리 (Binary search tree)

부모노드 보다 작은 값의 노드는 왼쪽 child, 큰 값의 노드는 오른쪽 child로 구성되어 있는 tree.

key값의 중복허용되지 않는다.

Binary Tree 순회 방법


이진 탐색 트리 ( Binary Search Tree )


탐색 연산은 O(logn)을 갖으며 (엄밀히 말하면 O(h), h는 높이 ), 한쪽으로 치우쳐진 편향 트리(Skewed Tree)가 되면 worst caseO(n)을 갖는다.

코드 보기 (c++)

Binary Search Tree의 단점


배열보다 많은 메모리를 사용했지만 시간복잡도가 같게되는 비효율적이 상황이 발생하기도 한다.

Rebalancing 기법의 등장

Balanced Tree

Last updated