常见面试算法题-数组二叉数

■ 题目描述

【数组二叉树】

二叉树也可以用数组来存储,给定一个数组,树的根节点的值存储在下标1,对于存储在下标N的节点,它的左子节点和右子节点分别存储在下标2*N和2*N+1,并且我们用值-1代表一个节点为空。

给定一个数组存储的二叉树,试求从根节点到最小的叶子节点的路径,路径由节点的值组成。

输入描述

输入一行为数组的内容,数组的每个元素都是正整数,元素间用空格分隔。

注意第一个元素即为根节点的值,即数组的第N个元素对应下标N,下标0在树的表示中没有使用,所以我们省略了。

输入的树最多为7层。

输出描述

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

示例1 输入输出示例仅供调试,后台判题数据一般不包含示例

输入

3 5 7 -1 -1 2 4

输出

3 7 2

说明

数组存储的二叉树如图,故到最小叶子节点的路径为3 7 2。


示例2 输入输出示例仅供调试,后台判题数据一般不包含示例

输入

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

输出

5 8 7 6

说明

数组存储的二叉树如图,故到最小叶子节点的路径为10 8 7 6,注意数组仅存储至最后一个非空节点,故不包含节点“7”右子节点的-1。

 以下代码为本人原创,可以供大家参考,若有不足之处,感谢指出!!!!

while stack:
    stack1 = []
    for node in stack:
        if 0 <= node[1]*2-1 < len(nums):
            if nums[node[1]*2-1] == -1:
                node[0].left = None
            else:
                b = Tree(nums[node[1] * 2 - 1])
                node[0].left = b
                stack1.append([b, node[1] * 2])
        else:
            node[0].left = None
        if 0 <= node[1]*2 < len(nums):
            if nums[node[1]*2] == -1:
                node[0].right = None
            else:
                b = Tree(nums[node[1]*2])
                node[0].right = b
                stack1.append([b, node[1]*2+1])
        else:
            node[0].right = None
        if not node[0].left and not node[0].right:
            res.append([node[0].val, node[1]])
    stack = stack1
res.sort(key=lambda x: x[0])
num = res[0][1]
cur = [num]
while num > 1:
    if num%2 == 0:
        num = num//2
        cur.append(num)
    else:
        num = (num-1)//2
        cur.append(num)
ans = []
for i in range(len(cur)-1, -1, -1):
    ans.append(nums[cur[i]-1])
print(' '.join(list(map(str, ans))))

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

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

相关文章

Interpretable3D:一种用于3D点云的即时可解释分类器

Interpretable3D&#xff1a;一种用于3D点云的即时可解释分类器 paper github

【病毒分析】phobos家族2700变种加密器分析报告

1.样本信息 ⽂件名Fast.exeSHA2563c95bd8e14f6aa92e94ec3318d23a8cc34192259MD528c6c0b4f54912ec73c9bfeb3f2a8f07运行平台Windows 2.感染迹象 2.1 文件结构分析 整体文件大小为200k,把冗余数据去掉,发现仍然可以运行,大小变为56k。与phobos家族的标准一致。 2.1.1 勒索信 …

python笔记 | 哥德巴赫猜想

哥德巴赫猜想&#xff1a;每个不小于6的偶数都可以表示成两个素数之和。 素数&#xff1a;只能被1和自身整除的正整数。就是大于1且除了1和它本身之外没有其他因数的数。例如&#xff0c;2、3、5、7、11等都是素数&#xff0c;而4、6、8、9等则不是素数。 下面这段Python代码…

Day 16 Linux服务管理和日志管理

服务管理 启动服务&#xff1a;systemctl start 服务名 停止服务&#xff1a;systemctl stop 服务名 重启服务&#xff1a;systemctl restart 服务名 重新加载配置文件&#xff1a;systemctl reload 服务名&#xff08;期间并不停止服务进程&#xff09; 查看服务运行状态…

十、OOP面向对象程序设计(五)

1、什么是接口以及接口的运用 1)接口定义 Java接口(Interface),是一些列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能。) 2)接口定义的一般形式 修饰符:…

git使用(上传自己的项目到github上)

之前最早使用的方式是使用as上面的菜单功能VCS——>share project on github,,, 现在我们使用命令的方法上传。 第一步&#xff1a;在github上面Create a new repository 这里输入仓库的名称和描述&#xff0c;勾选Add a README file&#xff0c;这会在创建仓库的时候添加…

一些重新开始面试之后的八股文汇总

一、内存中各项名词说明 1、机器内存概念说明 linux中的free命令可以查看机器的内存使用情况&#xff0c;vmstat命令也可以 其中不容易被理解的是&#xff1a; 内存缓冲/存数&#xff08;buffer/cached&#xff09; 1.buffers和cache也是RAM划分出来的一部分地址空间 2.buff…

css div添加滚动条(附加源码)

问题描述 先看效果图。 每个商品通过后台接口查询出来&#xff0c;前端v-for进行显示&#xff0c;所以这块我要添加一个滚动条&#xff0c;我不确定有多少个商品。 解决方案 实现思路&#xff1a;div设置高度为1000rpx&#xff08;我这边是举例&#xff0c;根据实际场景去设…

Jenkins 流水线多阶段构建

Jenkins流水线配置遇到 无法识别的。需要使用 自定义环境 项。 比如官网的在流水线中使用Docker Started by remote host 172.17.0.1 Obtained Jenkinsfile from git http://10.99.20.51:8082/root/java-devops-demo.git org.codehaus.groovy.control.MultipleCompilationErro…

Ribbon 添加右侧区域菜单项

效果图如下所示&#xff1a; 类似与上图效果所示&#xff0c;代码如下&#xff1a; RibbonPage* pageHome1 ribbonBar()->addPage(tr("Home")); //实现代码&#xff1a; { QMenu* menuOptions ribbonBar()->addMenu(tr("Options"))…

节点加密技术:保障数据传输安全的新利器

随着信息技术的快速发展&#xff0c;网络数据的安全传输问题日益凸显。节点加密技术作为一种新兴的加密手段&#xff0c;正逐渐成为保障数据传输安全的重要工具。本文将探讨节点加密技术的原理、应用及其优势&#xff0c;并分析其未来的发展趋势。 节点加密技术的原理 节点加密…

腾讯InstantMesh30秒图片生成3D模型;微软实时生成会说话的头像VASA;由 AI 创作的恶搞视频片段Sitcom Simulator

✨ 1: InstantMesh 30 秒内从一张图片生成 3D 模型 InstantMesh是一个基于单张图片&#xff0c;利用先进的稀疏视图大型重建模型&#xff08;LRM&#xff09;架构&#xff0c;快速生成3D网格&#xff08;Mesh&#xff09;的工具。这个框架允许用户将2D图片转换成3D模型&#…

学习笔记------时序约束之时钟周期约束

本文摘自《VIVADO从此开始》高亚军 主时钟周期约束 主时钟&#xff0c;即从FPGA的全局时钟引脚进入的时钟或者由高速收发器输出的时钟。 对于时钟约束&#xff0c;有三个要素描述&#xff1a;时钟源&#xff0c;占空比和时钟周期。 单端时钟输入 这里我们新建一个工程&#x…

如何使用Flask搭建web程序框架并实现无公网IP远程访问本地程序

文章目录 前言1. 安装部署Flask并制作SayHello问答界面2. 安装Cpolar内网穿透3. 配置Flask的问答界面公网访问地址4. 公网远程访问Flask的问答界面 前言 Flask是一个Python编写的Web微框架&#xff0c;让我们可以使用Python语言快速实现一个网站或Web服务&#xff0c;本期教程…

HarmonyOS NEXT 使用XComponent + Vsync 实现自定义动画

介绍 XComponent 提供了应用在 native 侧调用 OpenGLES 图形接口的能力&#xff0c;本文主要介绍如何配合 Vsync 事件&#xff0c;完成自定义动画。在这种实现方式下&#xff0c;自定义动画的绘制不在 UI 主线程中完成&#xff0c;即使主线程卡顿&#xff0c;动画效果也不会受…

汽车充电桩充电效率的四大决定因素

随着电动汽车的快速普及&#xff0c;交流充电桩作为电动汽车的充电基础设施&#xff0c;其充电效率受到了广泛的关注。接下来&#xff0c;我们将深入探讨交流充电桩的充电效率&#xff0c;包括充电效率的定义、影响因素以及提升方法。 充电效率的定义 交流充电桩的充电效率指的…

基于Springboot+Vue的Java项目-网上超市系统开发实战(附演示视频+源码+LW)

大家好&#xff01;我是程序员一帆&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &am…

构建现代网页的引擎:WebKit架构揭秘

在网络信息迅猛增长的今天&#xff0c;浏览器已经成为我们接触世界的重要窗口。而在浏览器的核心&#xff0c;有一个强大的引擎在默默地支撑着网页的渲染和执行&#xff0c;这就是WebKit。 WebKit的核心组件 WebKit作为开源浏览器引擎&#xff0c;由苹果公司发展而来&#x…

前端编程环境配置

目录 vscode插件的安装快捷键常用的快捷键自定义快捷键 vscode 插件的安装 汉化&#xff0c;将vscode改为中文版 Chinese (Simplified)修改开始标签&#xff0c;结束标签跟着一起变化 Auto Rename Tag颜色主题 One Dark Pro格式化代码(建议使用系统自带) 配置&#xff1a…

二叉树和数据结构

小红的完全二叉树构造 题目描述 小红想构造一个总共 n 个节点完全二叉树&#xff0c;该二叉树满足以下两个性质&#xff1a; 1. 所有节点的权值值为 1 ~ n 的一个排列。 2. 除了根节点以外&#xff0c;每个节点的权值和它父亲的权值的乘积为偶数。 请你帮小红构造出这个二叉树…