[๋ฐฑ์ค,c++] 9934๋ฒ - ์์ ์ด์ง ํธ๋ฆฌ
๋ฌธ์
9934๋ฒ: ์์ ์ด์ง ํธ๋ฆฌ
์๊ทผ์ด๋ ์ฌ๋ก๋ฒ ๋์์ ๋์ Donji Andrijevci๋ฅผ ์ฌํํ๊ณ ์๋ค. ์ด ๋์์ ๋๋ก๋ ๊น์ด๊ฐ K์ธ ์์ ์ด์ง ํธ๋ฆฌ๋ฅผ ์ด๋ฃจ๊ณ ์๋ค. ๊น์ด๊ฐ K์ธ ์์ ์ด์ง ํธ๋ฆฌ๋ ์ด 2K-1๊ฐ์ ๋ ธ๋๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. (์๋
www.acmicpc.net
์ฝ๋
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
vector<int>height[1025];
vector<int>v(1025);
void inorder(int start, int end, int level){
if(start > end) return;
int mid = (start+end)/2;
height[level].push_back(v[mid]);
inorder(start, mid-1, level+1);
inorder(mid+1, end, level+1);
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
int K; cin>>K;
for(int i=0; i<pow(2,K)-1; i++){
cin>>v[i];
}
inorder(0, pow(2,K)-2, 1);
for(int i=1; i<=K; i++){
for(auto it: height[i]){
cout<<it<<' ';
}
cout<<'\n';
}
}
ํ์ด
์ด์งํธ๋ฆฌ๋ฅผ ์ค์ ์ํ(inorder) ๋ฐฉ์์ผ๋ก ์ํํ๋ฉด์ ๊ฐ ๋ ๋ฒจ ๋ณ ๋ ธ๋๋ฅผ ์ ๋ถ ์ถ๋ ฅํ๋ ๋ฌธ์ ์ ๋๋ค.
์ค์ ์ํ์ ๊ฐ๋ ์ ์๋ ๊ฒ์๊ธ์์ ์ ๋ฆฌํ ์ ์ด ์์ต๋๋ค.
์ด์งํธ๋ฆฌ ํ์ ์ดํ๋ฒ
์ด์งํธ๋ฆฌ(Binary Tree) ๋ถ๋ชจ์ ์์์ผ๋ก ๋๋์ด ์๋ ํธ๋ฆฌ ๊ทธ๋ํ ๋ ธ๋์ ์ต๋ ์ฐจ์๊ฐ 2์ด๋ฉฐ, ๊ฐ๊ฐ ์ผ์ชฝ ์์(left child), ์ ์ค๋ฅธ์ชฝ ์์(right child)์ผ๋ก ๋๋ฉ๋๋ค. ์ด์งํธ๋ฆฌ์ ์ํ ์ด์งํธ๋ฆฌ์ ์ํ์
dkswnkk.tistory.com
ํด๋น ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ์์ด๋์ด๋ ๋ฃจํธ ๋ ธ๋(mid)๋ฅผ ์ฐพ์ ๋ค์ ๋ฃจํธ ๋ ธ๋๋ฅผ ๊ธฐ์ ์ผ๋ก ๋ค์ ์ข์ฐ๋ก ๋ฃจํธ ๋ ธํธ(mid)๋ฅผ ์ฐพ๋ ๋ฐฉ์์ผ๋ก ํ ์ ์์ต๋๋ค.
- ๋ฃจํธ ๋ ธ๋ ๊ฐ์ ๊ฒฝ์ฐ๋ ์ค๊ฐ๊ฐ์ด ๋ฃจํธ๊ฐ์ด ๋๋ค.
- ๋ฃจํธ๋ฅผ ๊ตฌํ ํ์๋ [์ฒ์~์ค๊ฐ-1], [์ค๊ฐ+1~๋]์ผ๋ก ๋ฒ์๋ฅผ ๋๋๊ณ ๊ฐ๊ฐ์ ๋ฒ์์์ ๋ค์ ์ค๊ฐ๊ฐ์ ์ฐพ๋๋ค.