您的位置:首页 > 其它

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