자료구조

[자료구조] 트리, 이진 트리, 이진 탐색 트리

menuhwang 2022. 11. 21. 17:18

트리 (Tree), 이진트리 (Binary Tree), 이진 탐색 트리 (Binary Search Tree)


트리


특징

  • 비선형 자료구조
  • 값을 가진 노드와 간선으로 이루어짐.
  • 최상위 노드인 루트 노드가 있음.
  • 모든 노드는 0개 이상의 자식 노드를 갖고 있음.
  • 부모-자식 관계로 부름.
  • 트리에는 사이클이 존재할 수 없음. (사이클이 있는 것은 그래프)
  • 루트에서 한 노드로 가는 경로는 유일함.

 

이진트리


자식 노드를 최대 2개까지 가질 수 있는 트리 구조.

용어

  • 루트 노드 : 부모 노드가 없는 최상단 노드. 트리에서 오직 하나만 존재.
  • 간선 : 부모 노드와 자식 노드를 연결하는 선
  • 말단 노드 (잎 노드) : 자식 노드가 없는 마지막 노드. 말단 노드는 여러 개 존재할 수 있음.
  • 깊이 : 루트 노드부터 어느 한 노드까지의 거리. 위 → 아래
  • 높이 : 가장 깊은 노드부터 어느 한 노드까지의 거리. 아래 → 위

종류

  • Skewed Binary Tree

 

  • Full Binary Tree

정 이진트리는 모든 노드들이 자식 노드를 0개 또는 2개 가지고 있는 트리를 말한다. 반대로 말하면 자식 노드를 1개만 가지고 있는 노드가 없는 트리 구조라고 할 수 있다.

 

  • Complete Binary Tree

마지막 레벨을 제외하고 모든 레벨이 완전히 채워져 있고, 마지막 레벨의 모든 노드는 왼쪽부터 채워져 있는 트리 구조.

 

  • Perfect Binary Tree

마지막 레벨을 제외한 모든 노드가 두 개의 자식을 가지는 트리 구조.

 

순회

  • 전위 순회 (pre-order)

각 루트를 순차적으로 먼저 방문하는 방식

(루트 → 왼쪽 자식 → 오른쪽 자식)

1 → 2 → 4 → 8 → 9 → 5 → 10 → 11 → 3 → 6 → 13 → 7 → 14

 

  • 중위 순회 (in-order)

왼쪽 하위 트리부터 방문 후 루트를 방문하는 방식

(왼쪽 자식 → 루트 → 오른쪽 자식)

8 → 4 → 9 → 2 → 10 → 5 → 11 → 1 → 6 → 13 → 3 → 14 → 7

 

  • 후위 순회

왼쪽 하위 트리부터 하위를 모두 방문 후 루트를 방문

(왼쪽 자식 → 오른쪽 자식 → 루트)

8 → 9 → 4 → 10 → 11 → 5 → 2 → 13 → 6 → 14 → 7 → 3 → 1

 

  • 레벨 순회

루트부터 계층 별로 방문

1 → 2 → 3 → 4 → 5 → 6 → …

 

 

이진 탐색 트리(Binary Search Tree)


목적

이진 탐색 + 연결 리스트

이진 탐색 : 탐색에 소요되는 시간 복잡도 O(logN) 삽입, 삭제 불가능

연결 리스트 : 삽입, 삭제 시간 복잡도 O(1) 탐색하는 시간 복잡도 O(N)

 

특징

  • 각 노드는 최대 2개의 자식을 가짐.
  • 각 노드의 왼쪽 자식은 부모보다 작고, 오른쪽 자식은 부모보다 큼.
  • 중복된 노드가 없어야 함. 이진 탐색 트리는 검색이 목적인 자료구조이다. 노드에 개수를 갖도록 처리하는 것이 더 빠르다.
  • 중복이 많은 경우 검색 속도가 저하되기 때문이다.
  • 중복이 없어야 하는 이유

동작 원리

추가

추가하려는 값을 노드와 비교하여 작으면 왼쪽 노드에 크면 오른쪽 노드에 추가한다.

이미 그 자리에 값이 있으면 같은 원리로 빈자리가 있을 때까지 반복한다.

 

검색

마찬가지로 찾는 값이 노드보다 작으면 왼쪽, 크면 오른쪽 노드를 검색하여 값을 찾을 때까지 반복한다.