二叉树求最大下标

二叉树与堆:从完全二叉树到数组存储,一文搞懂堆排序与TopK 二叉树是数据结构学习的基石,而堆作为其重要变体,常让初学者感到困惑。理解堆的关键,在于认清它本质上是一棵被紧凑数组存储的完全二叉树——利用下标映射代替指针,在连续内存中高效完成父子节点的定位。堆通过堆序性质实现弱排序,使得插入、删除和获取最值操作都能在对数时间内完成。基于这一原理,堆排序、TopK 问题、优先队列、定时器调度等经典场景都有了简洁而高效的解决方案。无论是面试中常见的二叉树遍历与深度计算,还是工程实践里的内存管理术语辨析,熟悉堆的构建与操作逻辑都能显著提升编程直觉。本文从二叉树形态讲起,串联起完 阅读详情

1.前言

题目描述

由浅到深、从左到右给出二叉树中每个节点的子节点,使用一维数组顺序储存该二叉树的节点(根节点的下标为1,若某节点的下标为i,其左孩子位于下标2i处右孩子位于下标2i+1处),求该数组最大下标至少是多少。

输入格式

第一行输入一个整数N,代表二叉树一共有N个结点(n <= 26)。接下来N行每行三个字符均为小写字母或*。中间用空格隔开。由浅到深、从左到右给出每个节点的左孩子和右孩子。不存在则为星号。

输出格式

输出一行,一个正整数,为该数组的最大下标至少是多少。

输入样例

6

a b c

b * *

c d e

d * *

e * f

f * *

输出样例

15 

 2.理解题意

可能你会想二叉树明明只有两个叉为什么每行有三个字符呢?

那你就要看一下下面的图片了:

 只要有星号的话,星号在哪边哪边就没有

题目给的测试样例,最后合成的图是:

3.思路

想到二这个数字,往往会让我想到二进制,我们可以让左代表0右代表1

用题目给的输入样例合成的图,用二进制计算一下(字符的右边是它的二进制码):

我们可以看到F的二进制码是最大的。

1111转成十进制是15.

所以我们这种方法是可行的。

4.代码

记得加头文件:

#include <iostream>
#include <cmath>
using namespace std;

二进制转换:

int n_ten(string num,int n){
  int num2[10001];
  int len = num.length();
  int sum=0,e;
  for (int i=0; i < len; i++){
  	if (num[i] > 96){
  		num2[i] = (num[i]-96)+9;
	  } 
	else{
  		num2[i] = num[i]-48;
	}
  }
  int j = len;
  for (int i=0; i < len;i++){
  	j --;
  	e = num2[i] * pow(n,j);
  	sum += e;
  }
  cout << sum << " ";
  return sum;
}

 个人喜好(pow)

输入

int main() {
    int n;
    cin >> n;
    char j_d[27],f_c[27][2];
    for (int i =0; i < n; i++){
    	cin >> j_d[i] >> f_c[i][0] >> f_c[i][1];
	} 
    return 0;
}

6

a b c

b * *

c d e

d * *

e * f

f * *

红色的字符: j_d

其他字符:f_c

核心代码:

    string num[27];
	int top = 1;
	num[top] = "1";
	top ++;
    for (int i =0; i < n; i++){
    	if (f_c[i][0] != '*'){
			string l = num[top-1];
    		num[top] = l+"0";
    		top ++;
		}
    	if (f_c[i][1] != '*'){
    		if (f_c[i][0] != '*'){
				string l = num[top-2];
    			num[top] = l+"1";
    			top ++;
			}
			else{
				string l = num[top-1];
    			num[top] = l+"1";
    			top ++;
			}
		}
	}

num是按照j_b的顺序,对应的字符二进制代码.

输出

	for (int i = 1; i <= top-1; i++){
		cout << j_d[i-1] << ":";
		n_ten(num[i],2);
		cout << "\n";
		
	}
	cout << "最大下标:";
	n_ten(num[top-1],2); 

这个程序,输出的时候,我不仅让他输出了最大下标,我还让他输出了每个字符对应的下标(那个循环).

如果有问题的话在评论区说

【面试经验】大疆笔试-计算机视觉算法B卷 3、a=np.random.randn(3,3) b=np.random.randn(3,1) ,那么c=a*b的维度应该是:*是元素乘法或者torch.mul,@才是矩阵乘法或者torch.matmul,不会触发广播机制;8、将分辨率降低一半时,精标定内参(fx、fy、cx、cy、k1、k2、k3)焦距、光心、畸变系数将分别变成(fx、fy、cx/2、cy/2、k1、k2、k3),只能搜到光心变成一半,畸变系数不变。12、KLT算法在频闪光源、重复纹理、高速机动、环境照度低的情况下效果显著下降。 阅读详情

相关推荐

深入解析APS开源排程工具OptaPlanner:链式结构与移动优化

本文深入解析了开源APS排程工具OptaPlanner的核心机制,重点阐述了链式结构如何作为排程优化的“骨架”,通过单一`previous`变量隐式定义资源与顺序,从而简化建模。文章详细介绍了基于此结构的移动操作(如`ChainChangeMove`)如何驱动优化引擎探索解空间,并自动触发影子变量更新与分数计算,为构建高效、灵活的生产计划系统提供了实践指导。

keras9composer的博客 298

python-排序算法(三)、堆排序

python-排序算法(三)、堆排序

adminwg的博客 2489

矩阵管理:一人100账号霸屏小红书,保姆级教程经验技巧

同时,如果你的账号表现很正常,很OK,它也增加账号权重。手机环境:一机一卡一号是基本操作,如果你觉得设备成本高,你就要知道WIN的云真机,一键新机,一键随机设备参数,一键还原,一键安装应用,自带批量发布笔记,私信聚合,自带回复私信,一键养号等等,一人批量注册100个小红书账号真的很简单!从流量逻辑来分析,大家有没有发现,从账号粉丝数来看,小红书很难出现类似抖音上超千万粉丝量级的账号,几十万粉丝的博主已经是头部账号了,原因在于,抖音的流量分发机制是80%的流量集中在 20% 的头部账号而。

FDF432DF的博客 5152

排序算法的c++实现——堆排序

我们利用最大堆可以实现数组从小到大的原址排序,利用最小堆的可以实现对数组从大到小的原址排序。 1 二叉堆的简单介绍: 最大堆与最小堆可以当作通过数组来实现的一个完全二叉树,除了最底层之外其它层都是满的,并且最底层也是从左到右填充的。在最大堆中,父结点的值大于或等于子结点的值;在最小堆中,父结点的值小于或等于子结点的值。 当堆的元素在数组中下标从1开始时,很容易计算出父结点/...

weixin_30296405的博客 167

告别双导航栏!微信小程序web-view嵌入H5的导航栏隐藏实战(附uniapp代码)

本文详细解析了微信小程序中web-view嵌入H5页面时出现的双导航栏问题,并提供了基于uniapp的完整解决方案。通过环境感知、动态适配和样式隔离等技术手段,实现导航栏的无缝整合,提升用户体验和屏幕空间利用率。文章包含实战代码示例和常见问题排查指南,帮助开发者快速解决这一常见痛点。

weixin_26945061的博客 347

基于ROS2系统开发机器人

以上是基于ROS 2开发机器人的基本流程和一个简单的发布者-订阅者示例。通过这个流程,你可以逐步扩展和优化你的机器人系统,实现更复杂的功能。

xuweilin的博客 1497

最大二叉树

题目大意:总是按照当前数组或者子数组中的元素值的最大值作为根节点,依次创建一颗二叉树。 输入:nums = [3,2,1,6,0,5] 输出:[6,3,5,null,2,0,null,null,1] 解释:递归调用如下所示: - [3,2,1,6,0,5] 中的最大值是 6 ,左边部分是 [3,2,1] ,右边部分是 [0,5] 。 - [3,2,1] 中的最大值是 3 ,左边部分是 [] ,右边部分是 [2,1] 。 - 空数组,无子节点。 - [2,1] 中的最大

zyd2016的博客 290

专栏二十:如何选择你的单细胞亚群的分辨率--ROGUE

ROGUE这是继chooseR后第二个计算单细胞亚群分辨率的内容,其实关于代码的运行很简单,网上已经有不少教程,重复这些就没意思了,这里主要是结合探讨一下这个算法。

m0_58549466的博客 981

leetcode 655 最大二叉树

给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下: 二叉树的根是数组中的最大元素。 左子树是通过数组中最大值左边部分构造出的最大二叉树。 右子树是通过数组中最大值右边部分构造出的最大二叉树。 通过给定的数组构建最大二叉树,并且输出这个树的根节点。 class Solution { public TreeNode constructMaximumBinaryTree(...

weixin_40161962的博客 424

YOLOv8改进,YOLOv8主干网络替换为ShuffleNetV2

ShuffleNet V2的设计原则:1.减少内存访问成本:通过优化数据传输路径,减少内存访问延迟,提高整体运算速度。2.考虑平台特性:针对不同硬件平台的特性进行优化设计,确保在目标平台上的高效运行。3.结构简洁高效:采用简洁而高效的模块设计,降低计算复杂度,同时保持或提升模型的预测准确性。下图,以四种不同计算复杂度水平下的准确性(在ImageNet验证集上的分类),速度和FLOPs的测量结果。(a, c) 为GPU结果,批量大小为8。(b, d) 为ARM结果,批量大小为1。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 1567

Windows 下 Claude Code Desktop 安装与使用全记录:从零到一的保姆级图文教程

本文主要介绍了Windows 下 Claude Code 安装全记录:从零到一的保姆级图文教程,希望能对学习使用 Claude Code 的同学们有所帮助。 文章目录 1. 背景 2. 安装Claude Code Desktop 3. 配置第三方API 4. 日常使用

weixin_43178406的博客 8万+

java计算二叉树的节点最小值_Java 最优二叉树的哈夫曼算法的简单实现

最优二叉树也称哈夫曼树,讲的直白点就是每个结点都带权值,我们让大的值离根近、小的值离根远,实现整体权值(带权路径长度)最小化。哈夫曼算法的思想我认为就是上面讲的,而它的算法实现思路是这样的:从根结点中抽出权值最小的两个(涉及排序,但是我这个实现代码没做严格的排序,只有比较)合并出新的根结点重新加入排序(被抽出来的两个自然是变成非根结点了啊),就这样循环下去,直到合并完成,我们得到一颗最优二叉树——...

weixin_32039589的博客 398

【YOLO系列】YOLOv4详解:模型结构、损失函数、训练方法及代码实现

摘要:YOLOv4在目标检测领域实现了精度与速度的平衡,通过CSPDarknet53骨干网络、SPP+PANet特征融合及CIoU损失函数等创新,在MS COCO数据集达到65.7% AP50,V100显卡实现62FPS实时检测。核心优化包括Mosaic数据增强、自对抗训练和解耦头结构,显著提升小目标检测和遮挡场景鲁棒性。代码实现采用CSP模块和SPP多尺度池化,兼顾计算效率与检测性能,为工业落地提供高效解决方案。(149字)

一碗白开水一 1358

[LeetCode] 662. 二叉树最大宽度

二叉树最大宽度

weixin_65043441的博客 1470

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

【笔试训练】给一个数组构建二叉树|从前序遍历与中序遍历构建二叉树|二叉树中的最大路径和

本文介绍了三种构建二叉树的方法及其实现思路。首先,通过层序遍历构建二叉树,借助队列实现节点的逐层处理。其次,利用前序遍历和中序遍历的结果构建二叉树,通过递归划分左右子树区间。最后,讨论了二叉树中的最大路径和问题,通过后序遍历计算每个节点的最大贡献值,并更新全局最大路径和。这些方法展示了二叉树构建和遍历的常见技巧,适用于不同的应用场景。

如果需要沟通,可添加微信公众号找我免费答疑 612

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

BFS(七)662. 二叉树最大宽度 数组下标模拟存储二叉树

给你一棵二叉树的根节点root,返回树的。树的是所有层中最大的。每一层的被定义为该层最左和最右的非空节点(即,两个端点)之间的长度。将这个二叉树视作与满二叉树结构相同,两端点间会出现一些延伸到这一层的null节点,这些null节点也计入长度。题目数据保证答案将会在带符号整数范围内。4最大宽度出现在树的第 3 层,宽度为 4 (5,3,null,9)。7最大宽度出现在树的第 4 层,宽度为 7 (6,null,null,null,null,null,7)。2。

曾几何时的博客 470

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

1110 Complete Binary Tree (25 分)

1110Complete Binary Tree(25 分) Given a tree, you are supposed to tell if it is a complete binary tree. Input Specification: Each input file contains one test case. For each case, the first ...

weixin_30551963的博客 77

笔试强训第十一天--求最近的公共祖先-- 求最大连续bit数

笔试强训第11天--求最近的公共祖先-- 求最大连续bit数

qq_68741368的博客 414

二叉树中堆的学习

那为什么不在升序时直接把小堆的堆顶拿出来呢:这样的话,数组(物理逻辑上是数组)就会被破坏,_a[0]是已经排序好的,接下来的堆只能从下标1开始了,这样就没有二叉树的父子关系了。堆的应用之一为堆排序。要注意的是满二叉树是一种特殊的完全二叉树。二叉树是什么样子,如图(为什么叫树,就是因为他长得像树,上层的是主干-->父节点,下层的是分支-->子节点,最后一层是叶子-->叶节点)把它的所有元素按完全二叉树的顺序存储方式存储在一个一维数组中,将根结点最大的堆叫做最大堆或大根堆,根结点最小的堆叫做最小堆或小根堆。

zmzmzmalo的博客 336

017.最大二叉树

654.最大二叉树

qq_70280303的博客 426

LeetCode 662. 二叉树最大宽度(合理利用二叉树顺序存储下标对应关系)

2021年04月09日 周五 天气晴 【不悲叹过去,不荒废现在,不惧怕未来】 本文目录1. 题目简介2. BFS法参考文献 1. 题目简介 662. 二叉树最大宽度 2. BFS法 合理利用二叉树顺序存储下标对应关系,为每个根结点建立编号,根据编号求得宽度值。 class Solution { public: int widthOfBinaryTree(TreeNode* root) { // 保存最大的宽度 int res = 0; // 队列

m0_37433111的博客 257

【二叉树】654. 最大二叉树

题目: 给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下: 二叉树的根是数组中的最大元素。 左子树是通过数组中最大值左边部分构造出的最大二叉树。 右子树是通过数组中最大值右边部分构造出的最大二叉树。 通过给定的数组构建最大二叉树,并且输出这个树的根节点。 示例 : 提示: 给定的数组的大小在 [1, 1000] 之间。 题解: 步骤: 1.确定递归函数的参数和返回值 参数:存放元素的数组、最左边索引,最右边索引,这里采用左闭右开的原则 返回类型:TreeNod

weixin_43955488的博客 236

力扣654最大二叉树(C++)

题目中说了输入的数组大小一定是大于等于1的,所以我们不用考虑小于1的情况,那么当递归遍历的时候,如果传入的数组大小为1,说明遍历到了叶子节点了。那么应该定义一个新的节点,并把这个数组的数值赋给新的节点,然后返回这个节点。这表示一个数组大小是1的时候,构造了一个新的节点,并返回。参数就是传入的是存放元素的数组,返回该数组构造的二叉树的头结点,返回类型是指向节点的指针。1.先要找到数组中最大的值和对应的下标, 最大的值构造根节点,下标用来下一步分割数组。确定单层递归的逻辑,这里有三步工作。

qq_51560134的博客 368

leetcode_654. 最大二叉树(C++)

题目 原题链接 给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下: 二叉树的根是数组中的最大元素。 左子树是通过数组中最大值左边部分构造出的最大二叉树。 右子树是通过数组中最大值右边部分构造出的最大二叉树。 通过给定的数组构建最大二叉树,并且输出这个树的根节点。 示例 : 输入:[3,2,1,6,0,5] 输出:返回下面这棵树的根节点: 6 / \...

qq_45698847的博客 427

leetcode 第 654 题:最大二叉树(C++)

654. 最大二叉树 - 力扣(LeetCode) 不难看出题目描述里的递归思路,不断地分成小区间递归: class Solution { public: // 最大值下标 int max(vector<int> &nums, int low, int high){ int max_index = low; for(int i = low+1; i <= high; ++i){ if(nums[i] >

zj 413

【打卡第230道】【二叉树】【leetCode高频】:104. 二叉树的最大深度

1、题目描述 给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 2、算法分析 本题使用的是递归,对二叉树的左孩子结点递归;对二叉树的右孩子结点进行递归。 使用Math.max(a,b)比较一下最大值。最后别忘记+1,要加上根结点。 其实层次遍历也是可以的,但是效率比较低。 3、代码实现 /** * Definition for a binary tree node. * public class

CodingLJ 183
上一篇: 好玩的一些网站,上班必备
下一篇: 了解递推。
B757-300
博客等级 码龄4年 259粉丝 52原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值