当前位置: 首页 > article >正文

完全二叉树【东北大学oj数据结构9-1】C++

完全二叉树
所有叶子都具有相同深度且所有内部节点的度数为2的二叉树称为完全二叉树。 另外,将二叉树除最低层以外的所有层都完全填充,从左到最后节点依次填充最低层的树,也称为(粗略地)完全二叉树。

如果表示二叉堆的数组为A,二叉堆的大小(元素个数)为H,则二叉堆的元素存储在A[1...H]中。树根的下标为1,给定节点的下标i,其父父节点(i)、左孩子left(i)和右孩子right(i)分别为⌊i / 2⌋。它可以很容易地用 2 × i 和 2 × i + 1 计算出来。

创建一个程序,读取由完全二叉树表示的二叉堆,并以如下格式输出二叉堆的每个节点的信息。

node id: key = k, parent key = pk, left key = lk, right key = rk,

其中id是节点编号(索引),k是节点值,pk是父值,lk是左子值,rk是右子值。请按此顺序输出此信息。但是,如果对应的节点不存在,则不进行输出。

输入
输入的第一行给出了二进制堆的大小 H。然后,按照节点的顺序给出表示堆中节点的值(keys)的H个整数,用空格隔开。

输出
按照上述格式输出二叉堆节点信息从索引1到H。请注意,每一行都以空格结尾。

约束
≤ 250
−2,000,000,000 ≤ 节点key值 ≤ 2,000,000,000

输入样例

5
7 8 1 2 3

输出样例

node 1: key = 7, left key = 8, right key = 1, 
node 2: key = 8, parent key = 7, left key = 2, right key = 3, 
node 3: key = 1, parent key = 7, 
node 4: key = 2, parent key = 8, 
node 5: key = 3, parent key = 8, 

#include <iostream>
#include <vector>
 
using namespace std;
 
int main() {
    // 读取二叉堆的大小
    int H;
    cin >> H;
 
    // 读取二叉堆的节点值,注意是1-based index
    vector<long long> heap(H + 1); // 使用1-based index
    for (int i = 1; i <= H; ++i) {
        cin >> heap[i];
    }
 
    // 遍历堆中的每个节点并输出其信息
    for (int i = 1; i <= H; ++i) {
        // 当前节点的key
        long long key = heap[i];
        // 父节点索引
        int parentIndex = i / 2;
        // 左子节点索引
        int leftIndex = 2 * i;
        // 右子节点索引
        int rightIndex = 2 * i + 1;
 
        // 输出当前节点的信息
        cout << "node " << i << ": key = " << key<<", "; 
 
        // 输出父节点信息
        if (parentIndex >= 1) {
            cout << "parent key = " << heap[parentIndex]<<", ";
        }
 
        // 输出左子节点信息
        if (leftIndex <= H) {
            cout << "left key = " << heap[leftIndex]<<", ";
        }
 
        // 输出右子节点信息
        if (rightIndex <= H) {
            cout << "right key = " << heap[rightIndex]<<", ";
        }
 
        // 输出一行后换行
        cout << endl;
    }
 
    return 0;
}

 


http://www.kler.cn/a/441888.html

相关文章:

  • 亲测有效!如何快速实现 PostgreSQL 数据迁移到 时序数据库TDengine
  • 最大矩阵面积问题
  • Asp .Net Core 实现微服务:集成 Ocelot+Nacos+Swagger+Cors实现网关、服务注册、服务发现
  • Ubuntu 24.04 LTS 通过 docker desktop 安装 seafile 搭建个人网盘
  • Ubuntu 24.04 LTS 安装 tailscale 并访问 SMB共享文件夹
  • 使用docker部署mysql和tomcat服务器发现的问题整理
  • 面试之手撸安全队列
  • 栈(线性表2)
  • 关于opengauss
  • 《半导体芯片制程:微观世界里的科技风云》
  • 蓝桥杯数列求值(2019试题C)
  • 【系统】Windows11更新解决办法,一键暂停
  • 安卓课设版算法计算器
  • 用.Net Core框架创建一个Web API接口服务器
  • lambda 表达式 闭包写法
  • 模具生产过程中的标签使用流程图
  • 前端的Python入门指南(完):错误和异常处理策略及最佳实践
  • YOLOv9-0.1部分代码阅读笔记-activations.py
  • 亚远景-实施ASPICE标准:全面提升汽车软件开发质量与效率的策略
  • leetcode二叉搜索树部分笔记
  • MySQL 中 Varchar(50) 和 varchar(500) 区别是什么?
  • 概率论深入学习书单
  • Halcon 直连相机
  • Excel加载项入门:原理、安装卸载流程与常见问题
  • CSS Grid 布局:属性及使用详解
  • qemu源码解析【总目录】