이진으로 꽉차있는 다음과 같은 트리를 말한다.
leaf node에서 오른쪽에서 부터 몇개 비면 완전이진트리라고도 한다. (때로는 포화이진트리를 완전이진트리라고 부르기도 한다.)
배열로 표현하기 좋다.
1베이스로 볼때.. 자식 노드는 2n, 2n+1 인덱스에 위치함을 알 수 있다.
레벨별 인덱스 위치는 1레벨이 1이고 2레벨이 2이고, 3레벨이 4이고, 4레벨이 8인것을 보아
n레벨의 시작인덱스 위치는 $2^n$임을 알 수 있다.
포화이진트리코드
아래는 내가 작성한 코드이며, 배열로 포화이진트리를 받아서 preorder로 방문해준다.
이 문제의 답에 쓰이기도 했다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | #include <bits/stdc++.h> using namespace std; using vi = vector<int>; //포화 이진 트리 (0-base) struct perfect_binary_tree { vi v; int n; perfect_binary_tree(int* arr, int arr_size) { v.assign(arr, arr + arr_size); n = arr_size; } perfect_binary_tree(vi& v) { this->v = v; n = (int)v.size(); } vi preorder() { vi ret; function<void(int)> dfs = [&](int ix) { ret.push_back(v[ix]); int l = (ix+1) * 2-1; int r = (ix+1) * 2 ; if (l < n-1) dfs(l); if (r < n-1) dfs(r); }; dfs(0); return ret; } }; int32_t main() { vi v = { 1,2,3,4,5,6,7,8 }; perfect_binary_tree t(v); vi p = t.preorder(); for(int a:p)cout << a << ' '; return 0; } | cs |
반응형
'Programming > Algorithm' 카테고리의 다른 글
KMP( Knuth, Morris, Prett) (0) | 2020.04.20 |
---|---|
기하 (0) | 2020.04.19 |
트리DP (0) | 2020.04.15 |
세그멘트 트리 (0) | 2020.04.13 |
최소신장트리(MST, Minimum Spanning Tree) (0) | 2020.04.12 |