完全二叉树的层序中(从1开始),根为root,左子树若存在则为2*root,右子树为2*root+1。于是便可以如下顺序中序遍历该完全二叉树。而root可以作为层序的序数。
InOrder(2*root);
visit(root);
InOrder(2*root+1);
二叉排序树的中序序列是非递减的,sort以后即可得到中序序列。结合中序遍历,第一次执行到visit(root)是最小的结点,也即level[root]=In[index++] (index初始为1)。
#include<iostream>
#include<algorithm>
using namespace std;
int T[1001];
int level[1001];
int N,index=1;
void InOrder(int root){
if(root>N)
return;
InOrder(2*root);
level[root]=T[index++];
InOrder(2*root+1);
}
int main(){
int i;
scanf("%d",&N);
for(i=1;i<=N;i++)
scanf("%d",&T[i]);
sort(T+1,T+N+1);///
InOrder(1);
for(i=1;i<=N;i++){
printf("%d",level[i]);
if(i!=N)
printf(" ");
}
system("pause");
return 0;
}
参考代码:https://blog.csdn.net/hy971216/article/details/81838750
感谢,原博主很棒!