二叉查找树,中序序列一定是有序的,而完全二叉树在非最第端都是满的,可以用序号表示,即设根节点为i那么它的孩子如果存在,那么一定是2i和2i+1;基于此,我们考虑,利用中序序列填充层序的序号问题。注意考虑边际问题,即当root值大于n说明此节点为空,返回递归
#include<cstdio>
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
const int maxn=1010;
int n,a[maxn],b[maxn],index=0;
void inorder(int root)
{
if(root>n)return;
inorder(2*root);
b[root]=a[index++];
inorder(2*root+1);
}
int main()
{
cin>>n;
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
sort(a,a+n);
inorder(1);
for(int i=1;i<=n;i++)
{
printf("%d",b[i]);
if(i!=n)
printf(" ");
}
}
本文探讨了二叉查找树与完全二叉树的关系,指出二叉查找树的中序序列一定有序,而完全二叉树可用序号表示节点。通过将二叉查找树的中序序列转换为完全二叉树的层序序列,文章提供了一个具体的算法实现,并附带代码示例。
269

被折叠的 条评论
为什么被折叠?



