1064 Complete Binary Search Tree (30分) 推荐:3星
2020-03-01 00:22
218 查看
点击前往【PAT甲级之路总纲】
题目
分析
推荐:3星
CBT:完全二叉搜索树。
要点
- BST排序后变成中序遍历
- 在深度遍历中实现层序遍历,引入 index , 左则index2+1, 右则index2+2 (从0开始)
- min((int)pow(2, l-1), leave) : root的左节点 最后一层的叶子数为判断节点
- end - start + 1: 为个数
知识点
- 求树的最大满层深度 :log(n+1)/log(2) 换底公式
- L为 除最后层的深度
- 求树的满层节点数: pow(2,L)-1
- 求树最后层余子数: n - (pow(2,L)-1)
- 最后层满子树: pow(2,L)
题解
构造完全二叉搜索树 + 层序遍历, 输入是in遍历
#include <iostream> #include <vector> #include <algorithm> #include <cmath> using namespace std; vector<int> in, level; void levelorder(int start, int end, int index) { ///程序遍历 if(start > end) return ; int n = end - start + 1; int l = log(n + 1) / log(2); /// 除了最后一层的层数 int leave = n - (pow(2, l) - 1);/// 最后一层的叶子节点数 /// pow(2, l - 1) - 1是除了root结点所在层和最后一层外,左子树的结点个数, /// pow(2, l - 1) 是l+1层最多拥有的属于根结点左子树的结点个数, /// min(pow(2, l - 1), leave)是最后一个结点真正拥有的属于根结点左子树上的结点个数 /// 获取到root的位置 int root = start + (pow(2, l - 1) - 1) + min((int)pow(2, l - 1), leave); level[index] = in[root]; levelorder(start, root - 1, 2 * index + 1); levelorder(root + 1, end, 2 * index + 2); } int main() { int n; scanf("%d", &n); in.resize(n); level.resize(n); for(int i = 0 ; i < n; i++) scanf("%d", &in[i]); sort(in.begin(), in.end()); ///将节点按从小到大排序 levelorder(0, n - 1, 0); printf("%d", level[0]); for(int i = 1; i < n; i++) printf(" %d", level[i]); return 0; }
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- 1064. Complete Binary Search Tree (30)【二叉树】——PAT (Advanced Level) Practise
- PAT_1064: Complete Binary Search Tree
- PAT甲题题解-1064. Complete Binary Search Tree (30)-中序和层次遍历,水
- 1064. Complete Binary Search Tree (30)
- 1064 Complete Binary Search Tree
- PAT 1064. Complete Binary Search Tree (二叉树遍历)
- 1064. Complete Binary Search Tree (30)
- PAT 1064. Complete Binary Search Tree (30)
- PAT_1064. Complete Binary Search Tree
- PAT (Advanced Level) 1064. Complete Binary Search Tree (30) 递归建立CBST
- 1064 Complete Binary Search Tree
- 1064. Complete Binary Search Tree (30)-PAT
- 【1064】Complete Binary Search Tree (30 分)
- 浙大 PAT 甲级 1064 Complete Binary Search Tree 深度优先搜索
- 浙大PAT 1064. Complete Binary Search Tree
- 1064. Complete Binary Search Tree (30)
- PAT 1064. Complete Binary Search Tree (30)(中序遍历来给完全搜索树赋值,题目是给出一个列数字,把它构建成完全搜索树并输出)
- PAT 1064. Complete Binary Search Tree (30) 快速建立完全二叉树
- PAT 1064. Complete Binary Search Tree
- 1064.Complete Binary Search Tree (30)...to be continued...