[자료 구조] 트리자료구조 | 알고리즘/비선형 자료구조2023. 10. 30. 16:11
Table of Contents
728x90
반응형
트리란?
트리란 싸이클이 없는 무방향 그래프를 말한다. 싸이클이 존재하지 않아서 모든 노드가 루트가 될 수 있다. 마치 실로 연결된 구슬이 있는데 한 구슬을 잡아서 들어올릴 때마다 그 구슬이 루트가 되고 트리 구조가 형성되는 것과 비슷하다.
트리 순회하기
그래프의 구조를 가지므로 BFS와 DFS를 이용할 수 있다. 이 과정에서 부모의 정보 or 깊이의 정보가 필요한 경우 중간중간에 기록해주면 된다.
1. BFS
void bfs(int root){
queue<int> q;
q.push(root);
while(!q.empty()){
int cur = q.front();
cout << cur << " ";
for(int nxt: g[cur]){
if(p[cur] == nxt) continue; //이미 자식이 기록되어 있으면 pass
q.push(nxt);
p[nxt] = cur; //부모 정보 기록
depth[nxt] = depth[cur] + 1; //깊이 정보 기록
}
}
}
BFS 2차원 그래프의 BFS와 달리 visit배열이 필요하지 않다. 부모 정보다 깊이 정보를 기록할 경우 queue에 자식들을 추가할 때 전달해주면 된다.
2. DFS
재귀
void dfs(int cur){
cout << cur << " ";
for(int nxt: g[root]){
if(p[cur] == nxt) continue;
p[nxt] = cur;
depth[nxt] = depth[cur] + 1;
dfs(nxt);
}
}
728x90
반응형
'자료구조 | 알고리즘 > 비선형 자료구조' 카테고리의 다른 글
[자료 구조] 레드 블랙 트리 (0) | 2023.12.20 |
---|---|
[자료구조] 해시 테이블 (0) | 2023.12.08 |
[자료 구조] 힙 이진트리 (1) | 2023.12.07 |
[자료구조] (트리) 자가 균형 트리 (1) | 2023.12.06 |
[자료구조] 이진 탐색 트리 (0) | 2023.10.31 |
@BE_개발자 :: 경이로운 개발일기
경이로운 BE 개발자가 되기 위한 프로그래밍 공부 기록장
도움이 되었다면 "❤️" 또는 "👍🏻" 해주세요! 문의는 아래 이메일로 보내주세요.