完全二叉树,按层序遍历方式给节点编号1,2,3,4的话。每一层的起始编号就是1,2,4..。直接用$2^{k-1}$算出来就行,然后第n层的节点个数也不会超过$2^{k-1}$,所有直接从1 << (k - 1)遍历到1 << k,就行。
但是完全二叉树不是满二叉树,最底层可以空几个,所以加个特判。
#include <iostream>
using namespace std;
const int N = 1010;
int n, k;
int a[N];
int main()
{
cin >> n;
for (int i = 1; i <= n; ++i)
cin >> a[i];
cin >> k;
if (1 << (k - 1) > n)
{
puts("EMPTY");
return 0;
}
for (int i = 1 << (k - 1); i < 1 << k; ++i)
{
if (i > n)
break;
else
cout << a[i] << ' ';
}
return 0;
}