PAT:BST
2016-05-12 13:48
375 查看
1064. Complete Binary Search Tree
思路:这个题目要求构造完全二叉搜索树。巧妙的解题思路是利用完全二叉树的的一个性质:
当前节点的下标为i,则其左孩子节点的下标为
2*i,右孩子节点的下标为
2*i+1。这是完全二叉树的特性,因此,反过来按这个性质构造出来的树就是一个完全二叉树。
如何构造这棵完全二叉搜索树?注意到,对于一棵完全二叉搜索树,其中序遍历得到的序列是递增序列。因此反过来,按中序遍历的方法构造树,得到的就是完全二叉搜索树。
代码:
#include<stdlib.h> #include<iostream> #include<vector> #include<string> #include<queue> #include<stack> #include<limits.h> #include<cmath> #include<set> #include<map> #include<utility> #include<algorithm> using namespace std; vector<int> node; vector<int> tree(1005,0); int pos,n; void build(int root){ if(root>n) return; int lson = root<<1,rson =(root<<1)+1; build(lson); tree[root] = node[pos++]; build(rson); } int main() { int pp; cin>>n; for(int i=0;i<n;++i){ cin>>pp; node.push_back(pp); } sort(node.begin(),node.end()); pos = 0; build(1); for(int i=1;i<=n;i++) { cout<<tree[i]; if(i!=n) cout<<' '; } cout<<endl; return 0; }
相关文章推荐
- iOS持续集成:jenkins+gitlab+蒲公英+邮件通知(Part 1)
- 折半查找的多种写法
- 除主键外 其余内容相同 避免重复插入的办法
- Windows环境下Release崩溃定位
- Unity3D/Plugins实现IOS设备二维码扫描功能
- MySQL 5.7.9 免安装配置
- 语法分析(4)...
- Http之Get/Post请求区别
- Proguard 不要混淆内部类
- 守护进程
- 基于common-fileupload实现文件上传
- 读书笔记(UIKit性能优化解析和Block经典实用)(一)
- L2-3. 月饼
- 移动端的头部标签和meta
- Handler+ExecutorService(线程池)+MessageQueue模式+缓存模式
- DQL
- 默认构造函数
- tableView的一些用法
- 【BDD】calabash 和 cucumber的使用
- 术语学习