文章
33
粉丝
0
获赞
136
访问
3.8k
根据我们初试学过的数据结构,完全二叉树的下标是下面这样的:
1
2 3
4 5 6 7
8.....
那么就有第d层(d=n-1)的节点下标范围为[2^(n-1),2^(n)-1]。
那么完全二叉树的遍历也变得简单起来了:
#include <stdio.h>
#include <math.h>
#include <stdbool.h>
int a[1001];
int main(){
int n;
while(scanf("%d", &n) == 1){
for(int i = 0; i < 1001; i++) a[i] = -1;//初始化为-1,配合下面的flag
for(int i = 1; i <= n; i++){
scanf("%d", &a[i]);//输入完全二叉树节点
}
int d;
scanf("%d", &d);
bool flag = false;
for(int i = (int)pow(2, d-1); i < (int)pow(2, d); i++){
//如果flag没被设置为true,那么在d层的节点值均是-1. 那么输出EMPTY
if(a[i] != -1){
printf("%d ", a[i]);
flag = true;
}
}
if(flag == false){
printf("EMPTY\n");
}
}
return 0;
}
登录后发布评论
暂无评论,来抢沙发