여러개의 점들이 서로 복잡하게 연결되어 있는 관계를 표현한 자료구조입니다.
서로 다른 점들이 직접적인 관계를 가지고 있다면 바로 이어주는 선이 존재하고, 간접적인 관계를 가지고 있다면 다른 여러 점을 거쳐서 이어지는 선이 존재할 수 있습니다. 여기서 이야기 하는 점은 그래프에서는 정점(vertex)이라고 표현하고, 선은 간선(edge)이라고 표현합니다.
1. 무향그래프, 방향그래프: 간선을 통해서 양 방향으로 갈 수 있는 것을 무향그래프라고 하며 단방향 으로만 갈 수 있는 그래프는 방향 그래프라고 합니다.
2. 진입차수, 진출차수: 한 정점에 진입(들어오는 간선)하고 진출(나가는 간선)하는 간선이 몇 개인지를 나타냅니다.
3. 인접: 두 정점간에 간선이 직접 이어져 있다면 이 두 정점은 인접한 정점입니다.
4. 자기루프: 정점에서 진출하는 간선이 곧바로 자기 자신에게 진입하는 경우 자기 루프를 가졌다 라고 표현합니다. 다른 정점을 거친지 않는다는 것이 특징입니다.
1. 인접 행렬: 인접 행렬은 정점들간의 인접함을 표시해 주는 행렬으로 2차원 배열의 모습을 가지고 있습니다. 만약 A정점과 B정점이 이어져 있다면 1, 이어져 있지 않다면 0으로 표시하는 일종의 표와 같은 모습입니다. 그래프를 인접행렬로 표현했을 때의 모습은 다음과 같습니다.

한 개의 큰 표와 같은 모습을 한 인접 행렬은 두 정점 사이에 관계가 있는지, 없는지 확인하기에 용이합니다.
가장 빠른 경로를 찾고자 할 때 주로 사용됩니다.
2. 인접 리스트: 인접 리스트는 각 정점이 어떤 정점과 인접한지 리스트의 형태로 볼 수 있는 표현 방식입니다.

트리 구조는 루트라는 하나의 꼭짓점 데이터를 시작으로 여러 개의 데이터를 간선으로 연결합니다. 이 데이터들을 노드라고 하며, 상위 노드와 하위 노드가 연결이 되면 부모/자식 관계를 가지게 됩니다. 2는 7와 5의 부모 노드가 되는 것이고, 7와 5는 2의 자식 노드가 되는 것이죠. 자식이 없는 노드는 나무의 잎과 같다고 하여 리프 노드라고 부릅니다.

이진 트리(binary tree): 자식 노드가 최대 두 개인 노드들로 구성된 트리를 이진 트리라고 정의합니다. 이 두개의 노드는 왼쪽 자식과 오른쪽 자식으로 분류합니다. 이진 트리는 자료의 삽입, 삭제 방법에 따라 정 이진 트리, 완전 이진 트리, 포화 이진 트리로 나뉩니다.

완전 이진 트리: 마지막 레벨을 제외한 모든 노드가 가득 차 있어야 하고, 마지막 레벨의 노드는 전부 차 있지 않아도 되지만 왼쪽이 채워져야 합니다.
정 이진 트리: 각 노드가 0 개 혹은 2 개의 자식 노드를 갖습니다.
포화 이진 트리: 정 이진 트리이면서 완전 이진 트리인 경우입니다. 모든 리프 노드의 레벨이 동일하고, 모든 레벨이 가득 채워져 있는 트리입니다.
모든 왼쪽 자식들은 루트나 부모보다 작은 값이고, 모든 오른쪽 자식들은 루트나 부모보다 큰 값인 특징을 가지고 있는 이진 트리를 이진 탐색 트리(BST)라고 정의합니다.