本题要求输出树相应层的所有节点,故只需记录所有节点的值,并计算该层所有节点的下标即可。
#include<stdio.h>
#include<math.h>
using namespace std;
int main(){
int n,buf[1001],d;
while(scanf("%d",&n) != EOF){
for(int i=1;i<=n;i++){
scanf("%d",&buf[i]);
}
scanf("%d",&d);
int m;
m=pow(2,d-1); //第d层的第一个节点
if(m>n) printf("EMPTY\n"); //第d层无节点
else{
while(m<n && m<pow(2,d)-1){ //输出第d层第一个至倒数第二个节点
printf("%d ",buf[m]); //节点间用空格隔开
m++;
}
printf("%d\n",buf[m]); //最后一个节点,后面没有空格
}
}
return 0;
}