본문 바로가기
CS/자료구조

[자료구조] Binary Tree

by 개발도사(진) 2024. 1. 10.

Binary Tree는 ordered tree의 일종으로, 각 node가 최대 2개까지의 children을 가질 수 있는 tree이다. 이 때, 모든 node의 children 개수가 모두 0 또는 2이면 이 binary tree는 'proper'하다고 하고, 그렇지 않으면 'improper' 하다고 한다.

 

Binary Tree의 특징

모든 node의 children 갯수가 2 이하라는 특징 때문에, (nonempty) binary tree는 다음과 같은 특징을 지닌다.

 

1. 높이가 h일 때, 전체 노드의 갯수는 h+1 보다 크거나 같고 2^(h+1)-1 보다 작거나 같다. 전체 노드의 갯수가 h+1인 경우는 각 internal node가 단 하나의 child만을 가질 때, 전체 노드의 갯수가 2^(h+1)-1 개일 때는 모든 internal node가 2개의 children을 가지는 경우이다.

 

2. external node의 갯수는 1보다 크거나 같고 2^h 보다 작거나 같다.

 

3. internal node의 갯수는 h 보다 크거나 같고 2^h-1보다 작거나 같다. 1. 번에서 나온 값에 2. 에서 나온 값을 뺀 것이다. 

 

4. 모든 internal node가 2개의 children을 갖는 경우 높이는 log(n+1)-1, 모든 internal node가 1개의 child 만갖는 경우 높이는 log(n-1)이다. 

 

Binary Tree 구현

1. Linked List 이용

다음 정보를 가진 node들을 담은 linked list를 통해 구현한다.

- element

- parent

- left child

- right child

struct node
{
    int element;
    node *parent;
    node *leftChild;
    node *rightChild;
};

 

2. Array-based

다음 규칙을 통해 구현한다.

- root node의 index는 0이다.

- qth element의 left child는 2q+1 위치에 넣는다.

- qth element의 right child는 2q+2 위치에 넣는다.

 

Traversal

Binary Tree를 순회하는 방식이다. 

1. Preorder Traversal : root -> left -> right 순서로 순회

2. Postorder Traversal : left -> right -> root 순서로 순회

3. Inorder Traversal : left -> root -> right 순서로 순회

 

'CS > 자료구조' 카테고리의 다른 글

[자료구조] Priority Queue  (0) 2024.01.17
[자료구조] Binary Search Tree  (0) 2024.01.12
[자료구조] Tree  (0) 2023.09.16
[자료구조] Queue  (0) 2023.09.13
[자료구조] Stack  (0) 2023.09.11