您的位置:首页 > 其它

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  PAT