Tree&Graph

황지웅·2022년 3월 13일
0

Tree


Tree란?

  • 트리 구조는 데이터가 바로 아래에 있는 하나 이상의 데이터에 단방향으로 연결된 계층적 자료구조이다
  • 데이터를 순차적으로 나열시킨 선형 구조가 아니라, 하나의 데이터 아래에 여러 개의 데이터가 존재할 수 있는 비선형 구조이다
  • 트리 구조는 계층적으로 표현이 되고, 아래로만 뻗어나가기 때문에 사이클이 없다

Tree구조의 용어

  • 노드(Node) : 트리 구조를 이루는 모든 개별 데이터
  • 루트(Root) : 트리 구조의 시작점이 되는 노드
  • 부모 노드(Parent node) : 두 노드가 상하관계로 연결되어 있을 때 상대적으로 루트에서 가까운 노드
  • 자식 노드(Child node) : 두 노드가 상하관계로 연결되어 있을 때 상대적으로 루트에서 먼 노드
  • 리프(Leaf) : 트리 구조의 끝 지점이고, 자식 노드가 없는 노드
  • 깊이(depth):루트로부터 하위 계층의 특정 노드까지의 깊이
  • 레벨(Level):같은 깊이를 가지고 있는 노드를 묶어서 레벨(level)
  • 높이(Height):리프 노드를 기준으로 루트까지의 높이(height)
  • 서브 트리(Sub tree):트리의 내부에, 트리 구조를 갖춘 작은 트리

binary Tree(이진트리)와 종류

1.Binary Tree

  • 노드에 child가 2개씩 붙는 트리를 일컫는다

2.Full Bindary tree

  • 각 노드가 0 개 혹은 2 개의 자식 노드를 갖습니다.

3.Complete binary tree

  • 마지막 레벨을 제외한 모든 노드가 가득 차 있어야 하고, 마지막 레벨의 노드는 전부 차 있지 않아도 되지만 왼쪽이 채워져야 합니다.

4.Perfect Binary tree

  • 모든 리프 노드의 레벨이 동일하고, 모든 레벨이 가득 채워져 있는 트리입니다.

5.Binart Search Tree(이진 탐색트리)

  • 모든 왼쪽 자식의 값이 루트나 부모보다 작고, 모든 오른쪽 자식의 값이 루트나 부모보다 큰 값을 가진다
  • 검색에 유용하다

Tree traversal

  • 특정 목적을 위해 트리의 모든 노드를 한 번씩 방문하는 것을 트리 순회라고 합니다

1. 트리의 순회 방식 3가지

1) 전위순회(preoder) MLR
A=>B=>D=>H=>I=>E=>J=>K=>C=>F=>L=>M=>G=>N=>O

2) 중위순회(inorder) LMR
H=>D=>I=>B=>J=>E->K=>A=>L=>F=>M=>C=>N=>G=>O

3) 후위순회(postorder) LRM
H=>I=>D=>J=>K=>E=>B=>L=>M=>F=>N=>O=>G=>C=>A


Graph


Graph란?

  • 여러 개의 점들이 서로 복잡하게 연결되어 있는 관계를 표현한 자료구조

Graph구조의 용어

  • 정점 (vertex): 노드(node)라고도 하며 데이터가 저장되는 그래프의 기본 원소입니다.
  • 간선 (edge): 정점 간의 관계를 나타냅니다. (정점을 이어주는 선)
  • 인접 정점 (adjacent vertex): 하나의 정점에서 간선에 의해 직접 연결되어 있는 정점을 뜻합니다.
  • 가중치 그래프 (weighted Graph): 연결의 강도(추가적인 정보, 위의 예시에서는 서울-부산으로 가는 거리 등)가 얼마나 되는지 적혀져 있는 그래프를 뜻합니다.
  • 비가중치 그래프 (unweighted Graph): 연결의 강도가 적혀져 있지 않는 그래프를 뜻합니다.
  • 무(방)향 그래프 (undirected graph):서울에서 부산으로 갈 수 있듯, 반대로 부산에서 서울로 가는 것도 가능합니다. 하지만 단방향(directed,tree) 그래프로 구현된다면 서울에서 부산을 갈 수 있지만, 부산에서 서울로 가는 것은 불가능합니다(혹은 그 반대). 만약 두 지점이 일방통행 도로로 이어져 있다면 단방향인 간선으로 표현할 수 있습니다.
  • 진입차수 (in-degree) / 진출차수 (out-degree): 한 정점에 진입(들어오는 간선)하고 진출(나가는 간선)하는 간선이 몇 개인지를 나타냅니다.
  • 인접 (adjacency): 두 정점 간에 간선이 직접 이어져 있다면 이 두 정점은 인접한 정점입니다.
  • 자기 루프 (self loop): 정점에서 진출하는 간선이 곧바로 자기 자신에게 진입하는 경우 자기 루프를 가졌다 라고 표현합니다. 다른 정점을 거치지 않는다는 것이 특징입니다.
  • 사이클 (cycle): 한 정점에서 출발하여 다시 해당 정점으로 돌아갈 수 있다면 사이클이 있다고 표현합니다. 내비게이션 그래프는 서울 —> 대전 —> 부산 —> 서울 로 이동이 가능하므로, 사이클이 존재하는 그래프입니다.

그래프의 표현방식


1.인접행렬(Adjacency matrix)

  • 인접 행렬은 서로 다른 정점들이 인접한 상태인지를 표시한 행렬로 2차원 배열의 형태로 나타낸다
  • 한 개의 큰 표와 같은 모습을 한 인접 행렬은 두 정점 사이에 관계가 있는지, 없는지 확인하기에 용이합니다
  • 가장 빠른 경로(shortest path)를 찾고자 할 때 주로 사용됩니다.

2.인접 리스트(Adjacency list)

  • 순서 상관없이 해당 정점에 인접한 정점들을 나열하면됨(순서는 예외가있을 수 있음)
  • 메모리를 효율적으로 사용하고 싶을 때 인접 리스트를 사용합니다.
    (인접 행렬은 연결 가능한 모든 경우의 수를 저장하기 때문에 상대적으로 메모리를 많이 차지합니다.)

그래프의 탐색(BFS/DFS)

0개의 댓글