Search
Duplicate
📗

완전 이진 트리

주차
문제번호
9934
언어
C++
티어
실버
유형
트리
재귀
nj_Blog
nj_상태
이해도
100%
풀이
사람
이해도 2
13 more properties

문제접근

dfs로 왼쪽, 루트, 오른쪽을 출력하게 하는 대신에 값을 넣는 방식을 선택했음

놓쳤던 부분

지역변수랑 전역변수랑 같은 이름으로 써서 제대로 입력값이 할당되지 않는 문제

코드

2356 KB

0 ms

#include <iostream> #include <vector> #include <cmath> using namespace std; vector<vector<int> > graph; vector<int> answer; vector<int> input; int total; int ind = 0; void dfs(int idx) { if (idx == -1) return ; dfs(graph[idx][0]); answer[idx] = input[ind++]; dfs(graph[idx][1]); } int main(void) { int k; int idx = 0; ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> k; total = pow(2, k) - 1; input.resize(total); for (int i = 0; i < total; i++) cin >> input[i]; graph.resize(total); answer.resize(total); fill(graph.begin(), graph.end(), vector<int>(2, -1)); for (int i = 0; idx < total - 1; i++) { graph[i][0] = ++idx; graph[i][1] = ++idx; } dfs(0); int l = 0; for (int i = 0; i < k; i++) { for (int j = 0; j < pow(2,i); j++) cout << answer[l++] << " "; cout << "\n"; } return (0); }
C++
복사