1064. Complete Binary Search Tree
2013-08-30 23:33
120 查看
#include <iostream> #include <cstdio> #include <string> #include <vector> #include <algorithm> #include <set> #include <cmath> using namespace std; vector<int>v; int ans[1010]; int n; int indexOfRoot(int size) { double t = log(size + 1) / log(2); int level = t; t -= level; if(t > 0) level ++; //计算该树有几层 int index = pow(2, level - 1); // 当为满二叉树时,root就为中间的那个节点 int sumOfLast = size - pow(2, level - 1) + 1; // 当为非满二叉树,缺的肯定在最后一行,我们只要看 if(sumOfLast < index / 2) index -= (index / 2 - sumOfLast); // 最后一行有没有满一半,不够一半就要更新index return index; } void cal(int i, int start, int end) { if(start > end) return; int index = start + indexOfRoot(end - start + 1) - 1; ans[i] = v[index]; if(2 * i <= n) cal(2 * i, start, index - 1); if(2 * i + 1 <= n) cal(2 * i + 1, index + 1, end); } int main() { int x; scanf("%d", &n); for(int i = 0; i < n; i ++) { scanf("%d", &x); v.push_back(x); } sort(v.begin(), v.end()); cal(1, 0, n - 1); for(int j = 1; j < n; j ++) printf("%d ", ans[j]); printf("%d\n", ans ); return 0; }
相关文章推荐
- 1064. Complete Binary Search Tree (30)
- 1064. Complete Binary Search Tree
- 1064. Complete Binary Search Tree (30)
- PAT-A 1064. Complete Binary Search Tree
- PAT - 甲级 - 1064. Complete Binary Search Tree (30)(完全二叉搜索树层次遍历)
- 1064. Complete Binary Search Tree (30)【二叉树】——PAT (Advanced Level) Practise
- 1064. Complete Binary Search Tree
- 1064. Complete Binary Search Tree
- 1064. Complete Binary Search Tree (30)
- 1064. Complete Binary Search Tree (30)
- 1064. Complete Binary Search Tree (30)
- 1064. Complete Binary Search Tree (30)-PAT
- PAT (Advanced Level) Practise 1064 Complete Binary Search Tree (30)
- 浙大PAT 1064. Complete Binary Search Tree
- PAT(A) 1064. Complete Binary Search Tree (30)
- pat 1064. Complete Binary Search Tree (30)
- 1064. Complete Binary Search Tree 解析
- 1064. Complete Binary Search Tree (30)
- 1064. Complete Binary Search Tree (30)解题报告
- 1064. Complete Binary Search Tree (30)