二叉树的构建

#include<iostream>
#include<set>
#include<algorithm>
using namespace std;
int tree[100];
int create(int _tree[],int _node[],int len)
{
int i,max=1;
_tree[1]=_node[1];
int level=1;
for(i=2;i<=len;i++)
{
level=1;
while(_tree[level]!=0)
{
if(_node[i]<_tree[level])
level=level*2;
else level=level*2+1;
if(max<level)
max=level;
}
_tree[level]=_node[i];
}
return max;
}
int main()
{
int n,num;
cin>>n;
int node[n+1];
for(int i=1;i<=n;i++)
cin>>node[i];
num=create(tree,node,n);
int y=1;
int w=num-1;
cout<<num-1<<endl;
for(int i=1;i<=num-1;i=i*2)
{
//printf("%d ",i);
for(int j=1;j<=i;j++)
cout<<tree[y++]<<' ';
cout<<endl;
}
// for(int i=1;i<=num-1;i++)
// cout<<tree[i]<<" ";
// cout<<tree[num]<<endl;
return 0;
}

 

 

运行样例

8
6 4 5 7 8 2 1 3

 

//有可能很占空间。

eg-  1 2 3 4 5 6 7

tree[2^7];

 

posted @ 2022-04-19 23:29  xxj112  阅读(45)  评论(0)    收藏  举报