11.13堆的各种操作算法,二叉树的一些性质


算法 


二叉堆的上调

在树上进行的插入排序 。循环次数不会超过树的高度,即插入交换次数不会超过ologn,n是结点个数

要么到根节点,即i=1结束,要么当前元素还比上面的元素小,直到不比上面的元素小,即h[i/2]<=elem

上调只需要在该分支上不断向上,而下调需要考虑是到左子树还是到右子树,具体就是看那个更小

二叉堆的下调

对于第二点,如果右孩子比根节点小,但是比左兄弟大,那么如果根节点和右孩子交换,右孩子成为根节点后,依然比其左兄弟(此时为左孩子)大,那么依然需要下调。而如果让更小的,即左孩子上来,那么交换完后就不需要调整

二叉堆的插入操作

插入是使堆的大小增加,删除是使堆的大小减少,增加最好不要直接放在顶点上,因为就需要调整两个结点,一个是下调新插入的,一个是放到底下的原顶结点,而如果是上调,就只需要调整新的

二叉堆的删除操作

从堆中取出顶点,然后先记录最后的那个元素,使n-1,之后把最后的结点放在顶点上,开始进行下调调整

二叉堆建堆

两种方式,即不断的上调和下调的区别

朴素建堆是上调操作

一共N个结点,每个结点都要logn的复杂度,所以时间复杂度是nlogn

上调建成的堆和下调建成的堆不一样

一些性质

把一棵树转换为二叉树后,这棵二叉树的形态是( A )。

A. 唯一的

对于完全二叉树,有

顺序存储n个结点的二叉树,完全二叉树需要的空间最小

只有完全二叉树才能顺序存储,或者说顺序存储只适合于完全二叉树 

就是说,只有完全二叉树,才能保证数组都是连续的,中间没有空缺的元素,不然数组一定不连续,中间一定有空缺的元素

3个结点可能构造出5种形态的二叉树

设叶子节点个数为n0,度为1的节点个数为n1,度为2的节点个数为n2,必有 n0+n1+n2 = n

(1) 对于二叉树有: n0 = n2+1

这个1是根节点,即n0+n1+n2=2n2+n1+1。

一个节点如果只有一个子节点,那么它的度就是1,除了根节点以外,每个结点都有自己的父节点,所以只需要把所有的度加起来就是除了根节点以外的所有结点的数量和

对于n=2n2+n1+1。如果n为奇数,由于2n2一定是偶数,所以n1一定是偶数

如果N为偶数,那么n1一定是奇数

对于完全二叉树,完全二叉树只可能有一个度为1的结点,即形成满二叉树的过程,满二叉树只有度为0和2的结点

一个满二叉树(完全二叉树)是指一个二叉树,其中每个层次除了最后一层可能不足最大容量外,其它层都是最大容量,而且最后一层从左到右所有节点都是满的 

一个节点如果只有一个子节点,那么它的度就是1。因此,如果一个二叉树没有度为1的节点,那么它的所有节点的度都只能是0或2。这意味着每个节点都有两个子节点(除了叶子节点,它们没有子节点)。然而,这并不意味着该树是满二叉树。

一个满二叉树的特征是,除了最后一层可能不足最大容量外,其它层都是最大容量,而且最后一层从左到右所有节点都是满的。对于一个给定的层数,满二叉树的节点数量可以通过公式2^i - 1(i是层数)计算得出。

满二叉树的总结点数一定是奇数,因为每层结点数都是偶数,即2^(k-1),

一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为K,且结
点总数是(2^k) -1 ,则它就是满二叉树。
一颗树深度为h,最大层数为k,深度与最大层数相同,k=h;
它的叶子数是: 2^h  第k层的结点数是: 2^(k-1)  总结点数是: 2^k-1 (2的k次方减一)  总节点数一定是奇数。

满二叉树是完全的完全二叉树 

设一棵完全二叉树共有699个节点,则在该二叉树中叶子节点数为?

由于n=2n2+n1+1,总结点数为奇数,所以N1为偶数,由于为完全二叉树,只可能为0,得n2=349,则n0=n-n2=n2+1,即350

向下取整再+1

二叉链表存储树,就是孩子兄弟表示法存储树

所谓编号,实际上就是每个结点被访问到的序号,也就只需要保证按照一定的顺序去遍历这个树

n=n0+n1+n2+n3+n4=4n4+3n3+2n2+n1+1

顺序存储不适用存储树,最好用来存储完全的树

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

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

相关文章

关于三维模型几何坐标修正的技术方法探究

关于三维模型几何坐标修正的技术方法探究 倾斜摄影三维模型的几何坐标修正是保证模型准确性和一致性的重要步骤。下面将探讨几种常见的技术方法用于倾斜摄影三维模型几何坐标修正。 1、块内坐标转换&#xff1a;在倾斜摄影中&#xff0c;可以将整个场景划分为多个块&#xff0…

k8s的service自动发现服务:实战版

Service服务发现的必要性: 对于kubernetes整个集群来说&#xff0c;Pod的地址也可变的&#xff0c;也就是说如果一个Pod因为某些原因退出了&#xff0c;而由于其设置了副本数replicas大于1&#xff0c;那么该Pod就会在集群的任意节点重新启动&#xff0c;这个重新启动的Pod的I…

LLM App ≈ 数据ETL管线

虽然现有的 LLM 应用程序工具&#xff08;例如 LangChain 和 LlamaIndex&#xff09;对于构建 LLM 应用程序非常有用&#xff0c;但在初始实验之外不建议使用它们的数据加载功能。 当我构建和测试我的LLM应用程序管道时&#xff0c;我能够感受到一些尚未开发和破解的方面的痛苦…

Spring事务之AOP导致事务失效问题

情况说明 首先开启了AOP&#xff0c;并且同时开启了事务。下面这个TransactionAspect就是一个简单的AOP切面&#xff0c;有一个Around通知。 Aspect Component public class TransactionAspect {Pointcut("execution(* com.qhyu.cloud.datasource.service.TransactionSe…

基于 Letterize.js + Anime.js 实现炫酷文本特效

如上面gif动图所示&#xff0c;这是一个很炫酷的文字动画效果&#xff0c;文字的每个字符呈波浪式的扩散式展开。本次文章将解读如何实现这个炫酷的文字效果。 基于以上的截图效果可以分析出以下是本次要实现的主要几点&#xff1a; 文案呈圆环状扩散开&#xff0c;扩散的同时…

YOLOv8-Seg改进:分割注意力系列篇 | 轻量级上采样CARAFE算子,助力小目标分割

🚀🚀🚀本文改进:轻量级上采样CARAFE算子,引入到YOLOv8,neck处 Upsanple替换为CARAFE 🚀🚀🚀CARAFE在小目标分割领域中应用广泛 🚀🚀🚀YOLOv8-seg创新专栏:http://t.csdnimg.cn/KLSdv 学姐带你学习YOLOv8,从入门到创新,轻轻松松搞定科研; 1)手把手教…

LeetCode | 20. 有效的括号

LeetCode | 20. 有效的括号 OJ链接 这道题可以使用栈来解决问题~~ 思路&#xff1a; 首先我们要使用我们之前写的栈的实现来解决此问题~~如果左括号&#xff0c;就入栈如果右括号&#xff0c;出栈顶的左括号跟右括号判断是否匹配 如果匹配&#xff0c;继续如果不匹配&#…

算法笔记-第五章-质因子分解

算法笔记-第五章-质因子分解 小试牛刀质因子2的个数丑数 质因子分解最小最大质因子约数个数 小试牛刀 质因子2的个数 #include<cstdio> int main() {int n; scanf_s("%d", &n); int count 0; while (n % 2 0) {count; n / 2; }printf("%…

【Mysql系列】Mysql基础篇

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

部署 KVM 虚拟化平台

虚拟化技术的演变过程分为软件模拟、虚拟化层翻译、容器虚拟化三个阶段 1 软件模拟的技术方式 软件模拟是通过软件完全模拟CPU、网卡、芯片组、磁盘等计算机硬件&#xff0c;因为是软件模拟&#xff0c;所以理论上可以模拟任何硬件&#xff0c;甚至不存在的硬件。但是由于是软…

Changes to Captions: An Attentive Network forRemote Sensing Change Captioning

字幕的变化&#xff1a;一个用于遥感变化字幕的关注网络 IEEE Transactions on Image Processing Shizhen Chang, Pedram Ghamisi 2023 摘要&#xff1a;近年来&#xff0c;高级研究集中在使用自然语言处理&#xff08;NLP&#xff09;技术对遥感图像进行直接学习和分析。准…

如何应对招聘中的职业性格测评?

很多同学听说要做性格测试&#xff0c;第一反应是如何让自己的性格让HR看起来更好....没办法为了顺利入职&#xff0c;咱不能老实作答&#xff0c;因为性格测评搞不好是真刷人的&#xff0c;刷人的&#xff08;无视你的专业能力和笔试成绩&#xff09;..... 可是....很多性格测…

C++标准模板(STL)- 类型支持 (受支持操作,检查类型是否拥有未被弃置的析构函数)

类型特性 类型特性定义一个编译时基于模板的结构&#xff0c;以查询或修改类型的属性。 试图特化定义于 <type_traits> 头文件的模板导致未定义行为&#xff0c;除了 std::common_type 可依照其所描述特化。 定义于<type_traits>头文件的模板可以用不完整类型实例…

ARPG----C++学习记录04 Section8 角色类,移动

角色类输入 新建一个角色C&#xff0c;继承建立蓝图,和Pawn一样&#xff0c;绑定输入移动和相机. 在构造函数中添加这段代码也能实现。打开UsePawnControlRotation就可以让人物不跟随鼠标旋转 得到旋转后的向前向量 使用旋转矩阵 想要前进方向和旋转的方向对应。获取当前控制…

Linux可以投屏到电视吗?用网页浏览器就能投屏到电视!

Linux系统的电脑如果要投屏到安卓电视屏幕上&#xff0c;可以使用投屏工具AirDroid Cast的网页版和TV版一起实现。 首先&#xff0c;在Linux系统的电脑里用chrome浏览器或edge浏览器打开webcast.airdroid.com。这就是AirDroid Cast的网页版。你可以看到中间白色框框的右上角有个…

简单地聊一聊Spring Boot的构架

本文由葡萄城技术团队发布。转载请注明出处&#xff1a;葡萄城官网&#xff0c;葡萄城为开发者提供专业的开发工具、解决方案和服务&#xff0c;赋能开发者。 前言 本文小编将详细解析Spring Boot框架&#xff0c;并通过代码举例说明每个层的作用。我们将深入探讨Spring Boot的…

GraphQL 与 REST 双重赋能:Hasura 帮你给数据库添加接口 | 开源日报 No.75

hasura/graphql-engine Stars: 30.3k License: Apache-2.0 Hasura GraphQL Engine 是一个开源产品&#xff0c;通过为您的数据提供 GraphQL 或 REST API 以及内置授权来加速 API 开发。它具有以下主要功能和核心优势&#xff1a; 内建强大查询&#xff1a;支持过滤、分页、模…

Cnyunwei

运维管理系统&#xff1a;监控系统 Cnyunwei Centos 6 封装 Cacti、Nagios、Centreon&#xff08;中英文自己切换&#xff09;、Check_MK、Nconf英文版本全部采用与国外官方同步的最新版本&#xff0c;会发布32位和64位两个版本。 安装很简单&#xff0c;直接回车即可全自动安…

如何在TS中使用JS库

在 TypeScript 中使用 JavaScript 库&#xff0c;几种常用的方法。 直接使用&#xff1a;如果 JavaScript 库不提供 TypeScript 类型定义文件&#xff08;.d.ts&#xff09;&#xff0c;您可以直接在 TypeScript 代码中使用该库。您可以通过在 TypeScript 代码的开头添加 //ts-…

模拟接口数据之使用Fetch方法实现

文章目录 前言一、package.json配置mock执行脚本二、封装接口&#xff0c;区分走ajax还是fetch三、创建mock目录&#xff0c;及相关接口文件四、定义接口五、使用mock数据使用模拟数据优化fetch返回数据 六、不使用模拟数据七、对比其他需要使用依赖相关配置如有启发&#xff0…
最新文章