백준/DFS BFS

[백준 9934번 / C++] 완전 이진 트리

배발자 2022. 3. 17.
반응형

dfs 문제이다. 

 

* 중위 순회의 흐름 차순은 L - Root - R 순이다. 

 

#접근방법

  1. 답을 저장할 이차원 벡터와 데이터를 저장할 일차원 벡터 생성.   
  2. 시작 포인터와 끝 포인터를 지정하여 그 중간점을 매개변수로 전달하여 왼쪽 자식 노드의 끝까지 들어간다.
  3. level 이 입력받은 깊이의 수와 동일하다면 return.
  4. 해당 레벨에 위치의 이차원벡터에 현재 담고있는 데이터의 값을 담아준다. 
  5. 우측 자식 노드로 재귀함수를 호출한다. 
#include <iostream>
#include <vector>
using namespace std; 
int n; 
vector <vector<int>> v;
void dfs(int s, int e, int level, vector<int>& data) {
	if (level==n) return; 	
	int mid = (s + e) / 2;
	dfs(s, mid - 1, level + 1, data);//왼쪽
	v[level].push_back(data[mid]); 
	dfs(mid + 1, e, level + 1, data); //오른쪽
}

int main() {
	cin >> n;
	vector <int> data((1 << n) - 1); 
	int i; 
	for (i = 0; i < (1 << n) - 1; i++){
		cin >> data[i]; 
	}
	int s = 0; 
	int e = --i; 
	v.resize(n); 
	dfs(s, e, 0, data);
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < v[i].size(); j++) {
			cout << v[i][j] << " ";
		}cout << endl; 
	}
}

 

 

9934번: 완전 이진 트리

상근이는 슬로베니아의 도시 Donji Andrijevci를 여행하고 있다. 이 도시의 도로는 깊이가 K인 완전 이진 트리를 이루고 있다. 깊이가 K인 완전 이진 트리는 총 2K-1개의 노드로 이루어져 있다. (아래

www.acmicpc.net

 

반응형

'백준 > DFS BFS' 카테고리의 다른 글

[백준 7569번 / C++] 토마토  (0) 2022.03.22
[백준 6593번 / C++ ] 상범 빌딩  (0) 2022.03.21
[백준 2573번 / C++] 빙산  (0) 2022.03.14
[백준 16953번 / C++] A → B  (0) 2022.03.14
[백준 11048번 / C++] 이동하기  (0) 2022.03.10

댓글