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

news2024/10/7 2:17:59


算法 


二叉堆的上调

在树上进行的插入排序 。循环次数不会超过树的高度,即插入交换次数不会超过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.coloradmin.cn/o/1206351.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Windows系统隐藏窗口启动控制台程序

背景 上线项目有时候需要一些控制台应用作为辅助服务来协助UI应用满足实际需求&#xff0c;这时候如果一运行UI就冒出一系列的黑框&#xff0c;这将会导致客户被下的不起&#xff0c;生怕中了什么不知名病毒 方案 可以使用vbs来启动&#xff0c;这个是window系统自带的&#…

(免费领源码)python#django#mysql校园校园宿舍管理系统84831-计算机毕业设计项目选题推荐

摘 要 本论文主要论述了如何使用Django开发一个校园宿舍管理系统&#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论述校园宿舍管理系统的当前背景以及系统开发的目的…

简单地聊一聊Spring Boot的构架

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

asp.net实验管理系统VS开发sqlserver数据库web结构c#编程web网页设计

一、源码特点 asp.net 实验管理系统 是一套完善的web设计管理系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为vs2010&#xff0c;数据库为sqlserver2008&#xff0c;使用c#语言开发。 asp.net实验管理系统1 应用技术&am…

初学UE5 C++①

游戏类 1.创建所需项的类 2.创建游戏模式类&#xff0c;在该类上实现所需项&#xff0c;引入头文件和构造函数时实例化 三种时间函数类型函数和提示类型 FName、FString、FText类型相互转化 FName用FName FString用ToString&#xff08;&#xff09; FText用FText&#xff1a;…

【nlp】2.1 认识RNN模型

认识RNN模型 1 什么是RNN模型2 RNN模型的作用3 RNN模型的分类:1 什么是RNN模型 RNN(Recurrent Neural Network),,中文称作循环神经网络,它一般以序列数据为输入, 通过网络内部的结构设计有效捕捉序列之间的关系特征,一般也是以序列形式进行输出。 一般单层神经网络结构:…

SAP-SD-外向交货单交期不符

创建外向交货单时报错 销售订单的交期还没到&#xff0c;所以不能做外向交货单 但是货已经加工完成&#xff0c;现在想交货 查看销售订单的交货期为12月15日&#xff08;va03&#xff09; 在VL01N里修改“选择日期为12月15日”就可以了。

C与汇编深入分析

汇编怎么调用C函数 直接调用 BL main传参数 在arm中有个ATPCS规则&#xff08;ARM-THUMB procedure call standard&#xff09;&#xff08;ARM-Thumb过程调用标准&#xff09;。 约定r0-r15寄存器的用途&#xff1a; r0-r3&#xff1a;调用者和被调用者之间传递参数r4-r11…

一些可以参考的文档集合15

之前的文章集合: 一些可以参考文章集合1_xuejianxinokok的博客-CSDN博客 一些可以参考文章集合2_xuejianxinokok的博客-CSDN博客 一些可以参考的文档集合3_xuejianxinokok的博客-CSDN博客 一些可以参考的文档集合4_xuejianxinokok的博客-CSDN博客 一些可以参考的文档集合5…

7天入门python系列之第五天python项目练习

第七天 Python项目实操 编者打算开一个python 初学主题的系列文章&#xff0c;用于指导想要学习python的同学。关于文章有任何疑问都可以私信作者。对于初学者想在7天内入门Python&#xff0c;这是一个紧凑的学习计划。但并不是不可完成的。 学到第7天说明你已经对python有了一…

2.3 Windows驱动开发:内核字符串转换方法

在内核编程中字符串有两种格式ANSI_STRING与UNICODE_STRING&#xff0c;这两种格式是微软推出的安全版本的字符串结构体&#xff0c;也是微软推荐使用的格式&#xff0c;通常情况下ANSI_STRING代表的类型是char *也就是ANSI多字节模式的字符串&#xff0c;而UNICODE_STRING则代…

2.4 Windows驱动开发:内核字符串拷贝与比较

在上一篇文章《内核字符串转换方法》中简单介绍了内核是如何使用字符串以及字符串之间的转换方法&#xff0c;本章将继续探索字符串的拷贝与比较&#xff0c;与应用层不同内核字符串拷贝与比较也需要使用内核专用的API函数&#xff0c;字符串的拷贝往往伴随有内核内存分配&…

ffmpeg扩展支持H265视频流的flv封装

ffmpeg扩展支持H265视频流的flv封装 由于Adobe暂停了对RTMP/FLV标准的更新&#xff0c;所以目前标准中没有支持HEVC视频编码格式。为避免各终端和服务器间的兼容性问题&#xff0c;FFmpeg也没有在RTMP/FLV的协议实现中进行HEVC的相关扩展。CDN联盟制定了相关的协议扩展规范&am…

C++引用 引用做函数参数

一.引用的定义和语法 // 给a取别名为b int &b a; // 修改b的值&#xff0c;a的值也会被修改&#xff0c;因为他们都指向同一个内存空间 b 20; 二.引用的注意事项 1.引用必须初始化如 int&b; 是错误的&#xff0c;因为没有初始化。 2.引用在初始化后&#xff0c;不…

二维码智慧门牌管理系统升级,实现综合运营可视化

文章目录 前言一、升级解决方案概述二、重点指标综合展示三、综合运营可视化 前言 随着科技的发展和城市化进程的加速&#xff0c;传统的门牌管理系统已经无法满足现代社会的需求。为了解决这一问题&#xff0c;一款二维码智慧门牌管理系统应运而生&#xff0c;为城市管理和运…

Jenkins Docker Swarm插件 配置的坑

配置 Docker Host URI 注意&#xff0c;这里要用 http://&#xff01;&#xff01;&#xff01;如果按照提示里用了 tcp:// 则会报错&#xff0c;异常信息如下&#xff1a; 2023-11-13 16:28:42.6830000 [id34] WARNING o.e.j.s.h.ContextHandler$Context#log: Error while s…

如何在TS中使用JS库

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

【C/PTA——8.数组2(课内实践)】

C/PTA——8.数组2&#xff08;课内实践&#xff09; 7-1 求矩阵的局部极大值7-2 求矩阵各行元素之和7-3 判断上三角矩阵7-4 点赞 7-1 求矩阵的局部极大值 #include<stdio.h> int main() {int m, n, i, j;int arr[100][100];scanf("%d %d", &m, &n);for…

PHP在自己框架中引入composer

目录 1、使用composer之前先安装环境 2、 在项目最开始目录添加composer.json文本文件 3、写入配置文件 composer.json 4、使用composer安装whoops扩展 5、引入composer类并且使用安装异常显示类 1、使用composer之前先安装环境 先安装windows安装composer并更换国内镜像…

部署 KVM 虚拟化平台

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