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

embedded/2024/12/22 16:01:56/

完全二叉树
所有叶子都具有相同深度且所有内部节点的度数为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 indexvector<long long> heap(H + 1); // 使用1-based indexfor (int i = 1; i <= H; ++i) {cin >> heap[i];}// 遍历堆中的每个节点并输出其信息for (int i = 1; i <= H; ++i) {// 当前节点的keylong 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.ppmy.cn/embedded/147864.html

相关文章

Web应用中的CSRF防护机制

什么是CSRF攻击&#xff1f; CSRF (Cross-site request forgery) 跨站请求伪造是一种常见的网络攻击方式。攻击者诱导用户访问已被攻击者控制的网页时&#xff0c;利用用户在被攻击网站已经获取的注册凭证&#xff0c;绕过后台的用户验证&#xff0c;冒充用户对被攻击的网站发…

Linux中部署项目

1.下载JDK17 进入 /usr/local 目录&#xff0c;创建 java 文件夹。并将 JDK17 上传到 java 目录下。 上传成功后&#xff0c;通过cd命令进入Java文件夹目录&#xff0c;解压 JDK17 压缩包&#xff0c;命令 unzip zulu17.44.53-ca-jdk17.0.8.1-linux_x64.zip。 如果报错说 u…

蓝叠模拟器adb连接并配置网络代理

说在前面&#xff1a; 由于配置wsl导致原模拟器失效&#xff0c;选择了蓝叠模拟器&#xff08;下载安装器后会自动配置为Hyper-v版本&#xff09;蓝叠国际不能自动配置root&#xff0c;需要手动破解&#xff0c;此处选择的是蓝叠中国&#xff08;二者可以同时安装并共存&#…

端口聚合配置

配置端口聚合 本文中端口聚合配置任务描述了如何配置以太网端口聚合。 概述 端口聚合&#xff0c;即将几个属性相同的物理端口聚合绑定到一起形成一个逻辑上的通道。端口的聚合方式可以是将几个物理端口静态的聚合到一起而不管与这些物理端口相连的端口是否符合聚合的条件&a…

Flutter组件————BottomNavigationBar

BottomNavigationBar 是Flutter中用于在屏幕底部显示导航栏的组件&#xff0c;它允许用户在几个主要视图之间进行切换。 参数 参数名类型描述itemsList定义导航栏中的每个项目&#xff0c;通常包含图标和标签。onTapValueChanged当用户点击导航栏中的项目时触发的回调函数&am…

MATLAB深度学习实战PCB缺陷检测

本文采用YOLO作为核心算法框架&#xff0c;结合Matlab构建用户界面&#xff0c;使用MATLAB进行开发。YOLO以其高效的实时检测能力&#xff0c;在多个目标检测任务中展现出卓越性能。本研究针对PCB电路板缺陷数据集进行训练和优化&#xff0c;该数据集包含丰富的PCB电路板缺陷图…

解决Apache/2.4.39 (Win64) PHP/7.2.18 Server at localhost Port 80问题

配置一下apache里面的配置文件&#xff1a;httpd.conf 和 httpd.vhosts.conf httpd.conf httpd-vhosts.conf 重启服务 展示&#xff1a; 浏览器中中文乱码问题&#xff1a;

AI呼入机器人详解

AI呼入机器人详解 原作者&#xff1a;开源呼叫中心FreeIPCC&#xff0c;其Github&#xff1a;https://github.com/lihaiya/freeipcc AI呼入机器人&#xff0c;也称为智能客服系统或虚拟客服助手&#xff0c;是利用人工智能技术来自动处理和响应客户来电的解决方案。这类机器人…