학교/자료구조

6. 트리

daykim 2022. 3. 14. 07:27

트리

노드로 이루어진 자료구조

  • 트리는 하나의 루트 노드를 갖는다.
  • 루트 노드는 0개 이상의 자식 노드를 갖는다.
  • 그 자식노드 또한 0개 이상의 자식노드를 갖는다.
  • 트리에는 싸이클이 존재할 수 없다.
  • 각 노드느 부모 노드로의 연결이 있을수도 없을수도 있다.
  • 비선형 자료구조로 계층적 관계를 표현

 

기본 용어

  • 노드 : 한 정보 아이템 + 다른 노드로 뻗어진 가지
  • 차수 : 한 노드의 서브트리 수
    • 단말 노드 : 차수 = 0
    • 비단말노드 : 차수 != 0
  • 형제 : 부모가 같은 노드
  • 리프 노드 : 자식이 없는 노드
  • 부모 <-> 자식
  • 트리의 차수 : 그 트리의 노드의 최대 차수
  • 조상 : 루트에서부터 그 노드에 이르는 경로상의 모든 노드
  • 레벨
    • 루트 : 레벨 1
    • 자식 : 부모 + 1
  • 트리의 높이, 깊이 : 최대 레벨

 

산술식

A + B

  • 중위(inorder) : LVR
  • 후위(postorder) : LRV
  • 전위(preorder) : VLR

 

트리의 노드 구조

typedef struct node *treep;
typedef struct node
{
    int data;
    treep left, right;
}

 

중위 순회

void inorder(treep ptr)
{
    if(ptr)
    {
        inorder(ptr -> left);
        printf("%d", ptr -> data);
        inorder(ptr -> right);
    }
}

 

전위 순회

void preorder(treep ptr)
{
    if(ptr)
    {
        printf("%d", ptr -> data);
        preorder(ptr -> left);
        preorder(ptr -> right);
    }
}

 

후위 순회

void postorder(treep ptr)
{
    if(ptr)
    {
        postorder(ptr -> left);
        postorder(ptr -> right);
        printf("%d", ptr -> data;
    }
}

 

승자 트리

패자 트리

 

이진 트리

각 노드가 최대 두 개의 자식 노드를 갖는 트리

포화 이진 트리 (Full Binary Tree)

마지막 레벨까지 모든 노드가 2개의 자식을 갖는 트리

  • 깊이 : K
  • 노드 수 : 2^K - 1

완전 이진 트리(Complete Binary Tree)

노드 삽입 시 왼쪽부터 차례대로 추가하는 이진 트리

포화 이진 트리의 leaf 노드 들의 오른쪽부터 제거하여 얻어진 트리

  • 레벨 i에서 최대 노드 수 : 2^(i-1)
  • 트리의 최대 노드 수 (깊이,높이 = K) : 2^K - 1

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

5. 이중 연결리스트  (0) 2022.03.14
4. 연결 리스트  (0) 2022.03.14
3. 스택과 큐  (0) 2021.09.28
2-2. 다항식  (0) 2021.09.27
2-1. 배열과 구조  (0) 2021.09.27