백준 9934 완전 이진 트리

2023. 3. 4. 10:59코딩 공부 연습

반응형

백준 9934 완전 이진 트리


오늘은 완전 이진 트리 문제를 풀었는데, 전위,중위,후위 순회를 다시 생각해 볼 수 있는 문제 였답. 사실 처음에는 진짜 노드들 만들고 링크드리스트로 이어 붙여주는 문제인가 하고 고민했는데, 그렇게 하는게 아니었다. 중위순회였기 때문에 배열의 가운데를 기준으로 분할 정복을 해주기만 하면 되었고, 쉽게 풀었는데 자꾸 이상한 에러가 나면서 안되더라.

변수명을 floor로 주었더니 이미 선언된 변수명과 충돌하여 안된다고 해, flor 로 고쳤더니 제대로 컴파일이 되었다. 이런 실수들 조심하고 일어나지 않도록 하자!!

#include <iostream>
#include <vector>
#include <queue>
#include <math.h>

using namespace std;

vector<int> lst;
vector<int> flor[12];

int total_n;
int n;

void dp_func(int from, int to, int level)
{
    if(from == to)
    {
        return;
    }
    int mid = (from + to)/2;

    flor[level].push_back(lst[mid]);
    dp_func(from, mid, level + 1);
    dp_func(mid+1, to, level + 1);
}

int main()
{
    int tmp;
    cin>>n;
    total_n = pow(2,n);
    for (int i = 0; i < pow(2,n) -1 ; i++)
    {
        cin>>tmp;
        lst.push_back(tmp);
    }

    dp_func(0, total_n -1, 0);

    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < flor[i].size(); j++)
        {
            cout<< flor[i][j] << " ";
        }
        cout<<"\n";
    }

    return 0;
}

'코딩 공부 연습' 카테고리의 다른 글

백준 2738 행렬 덧셈  (0) 2023.03.12
백준 2475 검증수  (0) 2023.03.11
백준 15900 나무 탈출  (1) 2023.03.03
백준 18126 너구리 구구  (1) 2023.03.02
백준 2302 극장 좌석  (1) 2023.02.26