인접리스트로 표현
graph_array = {A:[B, C], B:[A, E], C:[A,D,E], D:[C, E], E:[B,C,D]}
2차원 배열로 표현
graph_array = [[0,1,1,0,0], [1,0,0,0,1], [1,0,0,1,1], [0,0,1,0,1], [0,1,1,0]]
트리는 그래프의 일종으로 여러 노드가 한 노드를 가리킬 수 없는 구조를 말함
트리도 그래프의 일종이므로 노드와 간선으로 구성된다.
노드와 연결된 노드들 사이에는 부모와 자식 관계가 있으며, 한 방향으로만 연결되어있고, 자식 노드는 반드시 하나의 부모만 갖도록 하는 규칙이 있다.
트리에 여러 가지 규칙을 추가해 다양한 형태의 트리를 정의
자식 노드가 2개 이상을 정의할 수 있는 트리, 이진 트리는 자식 노드가 2개 이하인 트리, 완전 이진 트리는 자식 노드를 추가할 때 왼쪽부터 오른쪽으로 추가하는 규칙을 갖는 트리이고, 균형 이진 트리는 자식 노드의 추가 위치는 상관없지만 왼쪽과 오른쪽 레벨 차이가 1이하가 되도록 노드를 추가하는 트리 구조
트리에서 사용하는 용어
트리의 가장 위에 있는 노드 : 루트 노드
트리의 가장 마지막에 있는 노드 : 리프 노드
루트 노드와 리프 노드 사이의 노드들을 : 가지 노드
부모 노드에서 자식 노드가 생성될 때마다 레벨을 정의
한 부모 노드에서 생성된 노드들을 형제 노드로 정의
각 노드의 차수는 자식 노드의 개수를 의미
| 그래프 | 트리 | |
|---|---|---|
| 정의 | 노드와 그 노드를 연결하는 간선을 하나로 모아놓은 자료구조 | 그래프의 한 종류 |
| 방향성 | 방향/무방향 그래프 모두 존재 | 방향 그래프 |
| 사이클 | 사이클 가능 순환/비순환 그래프 모두 가능 | 사이클 불가능 비순환 그래프 |
| 루트 노드 | 루트 노드 개념이 없음 | 한 개의 루트 노드만 존재 |
| 부모-자식 | 부모-자식 개념이 없음 | 부모-자식 관계 |
| 모델 | 네트워크 모델 | 계층 모델 |
| 간선의 수 | 그래프에 따라 간선의 수가 다름 간선이 없을 수도 있음 | 노드가 n인 트리는 항성 n-1의 간선을 가짐 |
순회는 그래프 또는 트리와 같은 연결 구조에서 모든 노드를 순차적으로 탐색하는 방법
하나의 노드로 시작하여 차례대로 모든 노드를 한 번씩 방문하는 방법
모든 노드 또는 특정 노드를 방문하는 방법을 찾기 위한 방법
예) 도시와 도로를 그래프로 표현하는 경우 특정 도시에서 다른 도시로 갈 수 있는 길이 있는지 확인할 때 순회 방법을 사용할 수 있다.
전자회로에서 단자와 연결선을 그래프로 표현하는 경우 특정 단자와 연결되어 있는지 확인할 때 순회 방법을 사용할 수 있음
이와 같이 순회는 그래프 자료구조를 바탕으로 여러 가지 문제를 해결하기 위해 정의, 탐색 알고리즘으로 알려저 있다
깊이 우선 순회 (DSF: Depth First Search), 너비 우선 순회(BSF: Breadth First Search)
규칙
- 현재 노드의 인접 노드 중 방문하지 않은 노드를 방문
- 방문한 노드의 인접 노드 중 더 이상 방문하지 않은 인접 노드가 존재하지 않으면 방문했던 경로로 되돌아간다
- 방문하지 않은 노드가 더 이상 존재하지 않으면 종료한다.
규칙
- 현재 노드의 인접 노드를 모두 방문
- 인접 노드 중 더 이상 방문하지 않은 인접 노드가 존재하지 않으면 방문했던 경로를 되돌아간다
- 방문하지 않은 노드가 더 이상 존재하지 않으면 종료
유익한 글이었습니다.