언젠간코딩잘함 2023. 4. 25. 11:49

트리의 개념

 

트리는 노드로 이루어진 자료 구조

 

  1.  트리는 하나의 루트 노드를 갖는다
  2.  루트 노드는 0개 이상의 자식 노드를 갖는다
  3.  그 자식 노드 또한 0개 이상의 자식 노드를 갖고, 이는 반복적으로 정의된다

 

  •  노드들과 노드들을 연결하는 간선(edge)들로 구성되어있다
    •  트리에는 사이클(cycle)이 존재할 수 없다
    •  노드들은 특정 순서로 나열될 수도 있고 아닐수도 있다
    •  각 노드는 부모 노드로의 연결이 있을 수도 있고 없을 수도 있다
    •  각 노드는 어떤 자료형으로도 표현 가능하다
let Node = function (value) {
  this.value = value;
  this.children = [];
};

루트 노드(root node) 부모가 없는 노드, 트리는 하나의 루트 노드만을 가진다
단말 노드(leaf node) 자식이 없는 노드, '말단 노드' 또는 '잎 노드' 라고 부른다
내부 노드(internal) 단말 노드가 아닌 노드
간선(edge) 노드를 연결하는 선 (link, branch 라고도 부른다)
형제(sibling) 같은 부모를 가지는 노드
노드의 크기(size) 자신을 포함한 모든 자손 노드의 개수
노드의 깊이(depth) 루트에서 어떤 노드에 도달하기 위해
거쳐야 하는 간선(edge) 의 수
노드의 레벨(level) 트리의 특정 깊이를 가지는 노드의 집합
노드의 차수(degree) 하위 트리 개수 / 간선 수(degree) = 각 노드가 지닌 가지의 수
트리의 차수(degree of tree) 트리의 최대 차수
트리의 높이(height) 루트 노드에서 가장 깊숙이 있는 노드의 깊이

트리의 특징

  •  그래프의 한 종류이다, '최소 연결 트리' 라고도 불린다
  •  트리는 계층 모델 이다
  •  트리는 DAG(Directed Acyclic Graphs, 방향성이 있는 비순환 그래프)의 한 종류이다
    •  loop나 curcuit이 없다, self-loop도 없다 (즉, 사이클이 없다)
  •  노드가 n개인 트리는 항상 n-1개의 간선(edge)를 가진다
    •  즉, 간선은 항상 (정점의 개수 - 1)만큼을 가진다
  •  루트에서 어떤 노드로 가는 경로는 유일하다
    •  임의의 두 노드 간의 경로도 유일하다, 두 개의 정점 사이에 반드시 1개의 경로만 가진다
  •  한 개의 루트 노드만이 존재하며 모든 자식 노드는 한 개의 부모 노드만을 가진다
    •  부모 - 자식 관계이므로 흐름은 top-bottom 아니면 bottom-top으로 이루어진다
  •  순회는 Pre-order, In-order 아니면 Post-order로 이루어진다 (3가지 모두 DFS / BFS 안에 있다)
  •  트리는 이진 트리, 이진 탐색 트리, 균형 트리 (AVL 트리, red-black 트리), 이진 힙 (최대힙, 최소힙) 등이 있다

트리의 종류

 

트리 VS 이진 트리

 

  •  이진 트리(Binary Tree)
    •  각 노드가 최대 두 개의 자식을 갖는 트리
    •  모든 트리가 이진 트리는 아니다
    •  이진 트리 순회
      1.  중위 순회(in-order traversal): 왼쪽 가지 ➡️ 현재 노드 ➡️ 오른쪽 가지
      2.  전위 순회(pre-oreder traversal): 현재 노드 ➡️ 왼쪽 가지 ➡️ 오른쪽 가지
      3.  후위 순회(post-order traversal): 왼쪽 가지 ➡️ 오른쪽 가지 ➡️ 현재 노드