PAT 1022 Complete Binary Search Tree (30)
2016-07-27 11:50
316 查看
思路
1.a可以用来装这棵树,
a[0]到
a[n-1]输出的话就可以看作是bfs输出,关键是要标记出
a[0]到
a[n-1]应该把第几个数(已经排好序)输出。
2.叫记住,对于
a[i],他的左节点是
a[2*i+1],右节点是
a[2*i+2],并且只要其节点值小于
n即可,所以就可以通过中序遍历给
a[i]赋值。因为中序遍历就是会满足二进制搜索树的性质的。
3.按照上述结果输出就行了。
我出错的一些点
1.忘记通过中序遍历构造搜索树的方法了,直接递归,然后中间给点赋值就行了。代码
#include <iostream> #include<vector> #include<algorithm> using namespace std; int node[1003],a[1003],n; int k = 0; //感觉一定要记住下面这种方法 void create_tree(int i) { if (i >= n) { cout << "i"<<i<<endl; return; } int left = 2 * i + 1, right = 2 * i + 2; if (left < n) create_tree(left); a[i] = k++; if (right < n) create_tree(right); } int main() { cin >> n; create_tree(0); for (int i = 0; i < n; i++) { cin >> node[i]; } sort(node, node + n); for (int i = 0; i < n; i++) { if (i == n - 1) cout << node[a[i]] << endl; else cout << node[a[i]] << " "; } return 0; }
相关文章推荐
- libdvbpsi源码分析(四)PAT表解析/重建
- PAT配置
- 什么是端口复用动态地址转换(PAT) 介绍配置实例
- MikroTik layer7-protocol
- PAT是如何工作的
- PAT 乙级题:1002. 写出这个数 (20)
- PAT (Advanced Level) Practise 1001-1010
- 数据结构学习与实验指导(一)
- PAT Basic Level 1001-1010解题报告
- PAT 数素数
- PAT 福尔摩斯的约会
- PAT 德才论
- PAT 月饼
- 1001. 害死人不偿命的(3n+1)猜想
- 1002. 写出这个数
- 1032. 挖掘机技术哪家强
- 1001. 害死人不偿命的(3n+1)猜想 (PAT basic)
- 1002. 写出这个数(PAT Basic)
- 1004. 成绩排名(PAT Basic)
- 1006. 换个格式输出整数(PAT Basic)