一、思路
考察了两个数据结构知识点:
1、BST的中序遍历序列是个升序序列
2、完全二叉树的顺序存储:下标从0开始,则对结点i,其左孩子下标为i * 2 + 1,有孩子下标为1 * 2 + 2;
由此可以想到,对给定数据排序,并建立长度为N的数组即为一个完全二叉树,对其从0(根)开始中序遍历依次赋值,即得到完全二叉树的BST。且从0到N顺序遍历就是层序遍历序列
二、代码
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
int N, index = 0;
vector<int> in(1000), tree(1000);
void inorder( int t )
{
if( t < N )
{
inorder( t * 2 + 1 );
tree[t] = in[index++];
inorder( t * 2 + 2 );
}
}
int main()
{
scanf("%d", &N);
for( int i = 0; i < N; ++i )
scanf("%d", &in[i]);
sort( in.begin(), in.begin() + N );
inorder( 0 );
for( int i = 0; i < N; ++i )
printf("%s%d", i ? " ":"", tree[i]);
}
铁肥宅
发布了154 篇原创文章 · 获赞 144 · 访问量 9279
私信
关注