文章

33

粉丝

0

获赞

136

访问

3.8k

头像
树查找 题解:数组存放完全二叉树 C语言
P1386 北京邮电大学
发布于2026年3月19日 23:38
阅读数 114

根据我们初试学过的数据结构,完全二叉树的下标是下面这样的:

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;
}

 

 

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发