二叉排序树是以二叉树为基础的,在熟练掌握了二叉树的基础上,二叉排序树也就不再难了
题目描述如下:
题目大致意思:
根据输入序列,构建一个完全二叉排序树,然后输出该完全二叉排序树的层序遍历序列。
大致思路:
本题目可以使用不建树的思想,因为是一颗完全二叉树,所以根节点和子节点的编号之间会存在某种对应关系,我们可以利用该对应关系。又因为是二叉排序树,所以该中序遍历是单调递增的。对输入数据进行从小到大的排序,该顺序即为二叉排序树中序遍历的顺序,使用节点间的下标关系,对二叉排序树进行中序遍历,中序遍历过程中,可以将下标和节点编号对应起来。具体操作如代码所示。
提交结果如下:
提交代码如下:
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int arr[1000],level[1000];
int n,index=0;
void func(int root);
int main()
{
cin>>n;
for(int i=0;i<n;i++)
cin>>arr[i];
sort(arr,arr+n);
int root=0;
func(root);
for(int i=0;i<n-1;i++)
cout<<level[i]<<" ";
cout<<level[n-1]<<endl;
}
void func(int root)
{
if(root>=n)
return;
func(root*2+1);
level[root]=arr[index++];
func(root*2+2);
}
本次提交后累计得分为1649。