37. 数组二叉树

一、题目描述
二叉树只也可以用数组来存储,给定一个数组,树的根节点的值储存在下标1,对于储存在下标n的节点,他的左子节点和右子节点分别储存在下标2n和2n+1,并且我们用-1代表一个节点为空,给定一个数组存储的二叉树,试求从根节点到最小的 叶子节点只的路径,路径由节点的值组成。

二、输入描述
输入一行为数组的内容,数组的每个元素都是正整数,元素间用空格分割,注意第一个元素即为根节点的值,即数组的第n元素对应下标n,下标0在树的表示中没有使用,所以我们省略了,输入的树最多为7层。

三、输出描述
输出从根节点到最小叶子节点的路径上各个节点的值,由空格分割,用例保证最小叶子节点只有一个。

示例 1
输入:

3 5 7 -1 -1 2 4

输出:

3 7 2

示例 2
输入:

5 9 8 -1 -1 7 -1 -1 -1 -1 -1 6

输出:

5 8 7 6
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.csdn.net/lbp0123456/article/details/143730774

一、问题分析

首先读题,仔细看描述中的内容,发现需求是

1.二叉树也可以用数组来存储,

2.给定一个数组,树的根节点的值储存在下标1,

3.对于储存在下标n的节点,它的左子节点和右子节点分别储存在下标2n和2n+1,

4.并且我们用-1代表一个节点为空,给定一个数组存储的二叉树

5.试求从根节点到最小的叶子节点的路径,

6.路径由节点的值组成

7.输入描述:输入一行为数组的内容,数组的每个元素都是正整数,元素间用空格分割,注意第一个元素即为根节点的值,即数组的第n元素对应下标n,下标0在树的表示中没有使用,所以我们省略了,输入的树最多为7层。

8.输出描述:输出从根节点到最小叶子节点的路径上各个节点的值,由空格分割,用例保证最小叶子节点只有一个。

二、解题思路

1.

2.

3.首先理解一下题目,题目的意思是找到二叉树中最小的节点值,并且返回从根节点到达该叶子节点的路径上各个节点的值。

所以对于第一棵树,最小值是2(-1代表节点为空)我们的输出是3 7 2

第二棵树的最小值是6,所以输出是5 8 7 6

4.

对于在数组中存储的二叉树,如果树的根节点的下标为1时,树中的根节点的左子节点的下标是2n,右子节点的下标是2n+1

5.所以我们先找到最小值,找到最小值之后记录下来最小值的索引,

比如索引值是14,我们将索引值除以2,14/2=7,然后7再除以2=3,3再除以2=1

所以我们从根节点到最小值的索引分别是1 3 7 14

6.还有需要注意的是我们要找的是最小的叶子节点,所以如果是根节点不可以

关于这一点我们可以判断,如果找到的节点*2超过我们所有节点的值,那么这个节点是一个叶子节点

或者如果我们用总节点数除以2,的数字的下一个数字到最后一个节点是叶子节点。

三、具体步骤

使用的语言是C

#include <stdio.h>
#include <limits.h>
int main() {
    int arr[1000];
    arr[0] = 0;
    int idx = 1;
    int min = INT_MAX;
    int minidx = 0;
    while (scanf("%d", &arr[idx++]) != EOF) {
        // printf("输入数值%d, 索引值为%d\n", arr[idx - 1], idx - 1);
    }
    idx--;
    for(int i = 1; i < idx; i++) {
        if(arr[i] != -1) {
            if(arr[i] < min) {
                if(((i * 2) > idx)) {
                    min = arr[i];
                    minidx = i;
                    // printf("最小值更新为%d, 索引值为%d\n", min, minidx);
                }
            }
        }
    }




    int answer[idx];
    int aidx = 0;
    while (minidx != 1) {
        // printf("当前节点为%d值为%d\n", minidx, arr[minidx]);
        answer[aidx++] = minidx;
        minidx /= 2;
    }
    printf("%d", arr[1]);
    for (int i = aidx - 1; i >= 0; i--) {
        printf(" %d", arr[answer[i]]);
    }
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/947725.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

网关的主要类型和它们的特点

网关&#xff0c;作为网络通信的关键节点&#xff0c;根据其应用场景和功能特点&#xff0c;可以分为多种类型。 1.协议网关 特点&#xff1a; • 协议转换&#xff1a;协议网关的核心功能是转换不同网络之间的通信协议。例如&#xff0c;它可以将IPv4协议的数据包转换为IPv6协…

JAVA学习笔记_JVM

文章目录 初识jvm内存结构程序计数器(寄存器) 栈问题辨析内存溢出 线程诊断本地方法栈Heap堆内存溢出内存诊断 方法区内存溢出常量池 stringTable直接内存垃圾回收 初识jvm JRE JVM 基础类库 JDK JRE 编译工具 JavaSE JDK IDE工具 JavaEE JDK 应用服务器 IDE工具 jvm是…

无线AP安装注意事项

现在的办公楼、酒店等项目中都设计含有网络无线覆盖这一项&#xff0c;在项目实施中&#xff0c;往往采用的是便捷并且后期便于网络无线设备管理的无线ap设备&#xff0c;作为前端无线信号的覆盖。在具体安装无线AP过程中&#xff0c;我们必须要注意以下几点才能保证项目实施完…

PHP框架+gatewayworker实现在线1对1聊天--聊天界面布局+创建websocket连接(5)

文章目录 聊天界面布局html代码 创建websocket连接为什么要绑定&#xff1f; 聊天界面布局 在View/Index目录下创建index.html html代码 <div id"chat"><div id"nbar"><div class"pull-left">与牛德胜正在聊天...</div…

毕设中所学

1、交叉引用 在毕业设计论文Word中交叉引用参考文献_交叉引用如何标注[1~6]-CSDN博客 另&#xff1a;将标号或其他文字改为上标的快捷键是CtrlShift。 图的交叉引用一样&#xff0c;修改引用类型即可。 2、ENVI安装 ENVI5.6 安装教程&#xff0c;新手入门&#xff08;超详细…

xilinx的高速接口构成原理和连接结构及ibert工具的使用-以k7 GTX为例

一、相关简介 Xilinx的高速接口称之为transceivers(高速收发器&#xff09;&#xff0c;这部分的电路是专用电路&#xff0c;供电等都是独立的&#xff0c;根据速率可以分为GTP/GTX/GTH/GTY/GTM等。 Xilinx的高速接口是QUAD为单位的&#xff0c;没一个QUAD由一个时钟COMMON资…

Formality:官方Tutorial(一)

相关阅读 Formalityhttps://blog.csdn.net/weixin_45791458/category_12841971.html?spm1001.2014.3001.5482 本文是对Synopsys Formality User Guide Tutorial中第一个实验的翻译&#xff08;有删改&#xff09;&#xff0c;Lab文件可以从以下链接获取。 Formality官方Tu…

【openwrt】OpenWrt 路由器的 802.1X 动态 VLAN

参考链接 [OpenWrt Wiki] Wi-Fi /etc/config/wirelesshttps://openwrt.org/docs/guide-user/network/wifi/basic#wpa_enterprise_access_point 介绍 基于802.1X 无线网络身份验证࿰

Mac 环境 VVenC 编译与编码命令行工具使用教程

VVenC VVenC 是一个开源的高效视频编码器&#xff0c;专门用于支持 H.266/VVC (Versatile Video Coding) 标准的编码。H.266/VVC 是继 HEVC (H.265) 之后的新一代视频编码标准&#xff0c;主要目的是提供比 HEVC 更高的压缩效率&#xff0c;同时保持或提高视频质量。H.266/VVC…

wx016基于springboot+vue+uniapp的超市购物系统小程序

开发语言&#xff1a;Java框架&#xff1a;springbootuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#…

RTC:实时时钟

RTC&#xff1a;实时时钟 1、实时时钟2、闹钟中断3、秒中断4、输出功能5、BKP的读写6、BKP的侵入事件 1、实时时钟 ①RTC.c #include "RTC.h"/*** brief&#xff1a;RTC初始化函数*/ RCC_PeriphCLKInitTypeDef RTCPeriphClkInit; //RTC时钟配置结构体 RTC_HandleT…

黑马JavaWeb开发跟学(十五).Maven高级

黑马JavaWeb开发跟学.十五.Maven高级 Maven高级1. 分模块设计与开发1.1 介绍1.2 实践1.2.1 分析1.2.2 实现 1.3 总结 2. 继承与聚合2.1 继承2.1.1 继承关系2.1.1.1 思路分析2.1.1.2 实现 2.1.2 版本锁定2.1.2.1 场景2.1.2.2 介绍2.1.2.3 实现2.1.2.4 属性配置 2.2 聚合2.2.1 介…

cka考试-03-k8s版本升级

一、原题 二、解答 [root@master ~]# kubectl get node NAME STATUS ROLES AGE VERSION master Ready control-plane,master 25h v1.22.12 node1 Ready worker 25h v1.22.12 node2 Ready worker …

【Java项目】基于SpringBoot的【垃圾分类系统】

【Java项目】基于SpringBoot的【垃圾分类系统】 技术简介&#xff1a;本系统使用采用B/S架构、Spring Boot框架、MYSQL数据库进行开发设计。 系统简介&#xff1a;使用者分为管理员和用户、垃圾分类管理员&#xff0c;实现功能包括管理员&#xff1a;首页、个人中心、用户管理、…

文本区域提取和分析——Python版本

目录 1. 图像预处理 2. 文本区域提取 3. 文本行分割 4. 文本区域分析 5. 应用举例 总结 文本区域提取和分析是计算机视觉中的重要任务&#xff0c;尤其在光学字符识别&#xff08;OCR&#xff09;系统、文档分析、自动化数据录入等应用中有广泛的应用。其目标是从图像中提…

华为的数字化转型框架和数字化转型成熟度评估方法

2016年&#xff0c;华为公司数字化转型变革规划汇报通过&#xff0c;一系列的变革项目由变革指导委员会(Executive Steering Committee,ESC)完成立项。8年多来&#xff0c;华为数字化转型工作初步取得了一些成果&#xff0c;比如&#xff1a; 实现“销售收入翻番&#xff0c;但…

算法 Class 006(二分搜索)

一、查找一个数 在一个有序数组中查找数字&#xff0c;每次一循环可 砍掉一半的值&#xff0c;只要确定了 arr[mid] 与 num 之间的关系。 大于num 忽略掉 mid及右边的数字 小于 num 忽略掉 mid 及左边的数字 二、 找大于等于 num 的最左位置 意思就是该下标及右边的数都是大于…

【工具整理】WIN换MAC机器使用工具整理

最近公司电脑升级&#xff0c;研发同学统一更换了 Mac Book Pro 笔记版电脑&#xff0c;整理一下安装了那些软件以及出处&#xff0c;分享记录下&#xff5e; 知识库工具 1、语雀 网址&#xff1a;语雀&#xff0c;为每一个人提供优秀的文档和知识库工具 语雀 个人花园&…

EdgeX规则引擎eKuiper

EdgeX 规则引擎eKuiper 一、架构设计 LF Edge eKuiper 是物联网数据分析和流式计算引擎。它是一个通用的边缘计算服务或中间件,为资源有限的边缘网关或设备而设计。 eKuiper 采用 Go 语言编写,其架构如下图所示: eKuiper 是 Golang 实现的轻量级物联网边缘分析、流式处理开源…

Python脚本实现通过Vector VN1630A CAN盒子与ECU通信

1 安装 python-can 包 安装命令如下&#xff1a; pip install python-can安装完成后可用下面命令查看是否安装成功及版本。 pip show python-canName: python-can Version: 4.4.2 Summary: Controller Area Network interface module for Python Home-page: https://github.…