软件23-上午题-树与二叉树2

news2025/1/20 20:11:28

一、平衡二叉树

平衡二叉树:是一棵空树它的左右两个子树的高度差的绝对值不超过 1, 并且左右两个子树都是一棵平衡二叉树

注意:

完全二叉树 = 平衡二叉树!!!

二、二叉排序树(二叉查找树、二叉搜索树)

2-1、二叉排序树的定义

对于二叉排序树的任何一个非叶子节点,要求左子节点的值比当前节点的值小右子节点的值比当前节点的值大(如果有相同的值,则该节点放在左子节点或右子节点都可)。

左子树节点的值 < 根节点的值 < 右子树结点的值

二叉排序树的特点:

中序遍历,得到的序列是有序序列。

示例:

2-2、二叉排序树的构造

出题方式:给一组关键字序列,用这组关键字序列构造二叉排序树。

构造方式:第一个关键字是根节点,然后依次遍历后面的关键字,比根节点小的,就往左挂,比根节点大的就往右挂。

示例:23 31 17 19 11 27 13 90 61

不同的关键字序列可以构造相同的二叉排序树。

2-3、真题

真题1:

真题2:

真题3:

真题4:

真题5:

三、最优二叉树(哈夫曼树)

3-1、哈夫曼树的定义

带权路径长度最短的树。

结点的带权路径长度:该节点到树根之间的路径长度 * 该节点的权值

树的带权路径长度 = 树中所有叶子结点的带权路径长度只和。

示例:

3-2、构造哈夫曼树

给定n个权值{w1, w2, w3, ......, w4, w5},构成n棵二叉树的集合F = {T1, T2, T3, ......, Tn};

1、选择根结点权值最小的两棵二叉树,并以它们为左右子树构造一棵新的二叉树,新二叉树根结点的权值为其左右子树根结点权值之和。 

2、从F中删除选择的两棵二叉树,并将新二叉树放到集合F中,继续步骤1。

以选中的两棵子树构成新的二叉树,哪个作为左子树,哪个作为右子树,并没有明确。所以,最优二叉树不唯一,但其 WPL的值是唯一确定的

构造哈夫曼树的原则:(能够减小二叉树的带权路径长度)

权值大的叶子结点离根结点近;

权值小的叶子结点离根结点远

3-3、哈夫曼树的性质

1、只有度为0、2,没有度为1的节点;

2、用n个节点构造哈夫曼树,这n个节点都会变成叶子结点;

3、哈夫曼树的总节点个数:2n-1;

3-4、哈夫曼树的构造规律

  • 从前往后,找两个权值最小的;
  • 构造的时候,左小右大;
  • 新的根节点,加入到结尾
  • 权值相同,从前往后取结点
  • 用时再调

目的:正确求出哈夫曼编码

3-5、哈夫曼编码

英文字符集中的26个字符可用?位二进制位表示?

2^5 = 32 > 26

即可用5位二进制位表示。

规定哈夫曼树中的左分支为0,右分支为1,从根节点到叶子结点所经过的分支对应的0和1组成的序列便为该节点对应字符的编码。

示例:

哈夫曼编码的特点:

        在一组字符的哈夫曼编码中,不可能出现一个字符的哈夫曼编码是另一个字符哈夫曼编码的前缀。 

3-6、哈夫曼编码压缩比

示例:

因为有5中不同的字符,2^3 = 8 >= 5,所以,等长编码最少有3位。

以频率作为权重,构造哈夫曼树:

因此,各字符的编码为:

按照出现频率计算加权平均长度:字符位数 * 出现频率

a的位数 * 40% + b的位数 * 10% + c的位数 * 20% + d的位数 * 16% + e的位数 * 14%

= 1 * 40% + 3 * 10% + 3 * 20% + 3 * 16% + 3 * 14%

= 2.2位 

计算压缩比

未压缩长度为 3 ,压缩后平均长度为 2.2

(3 - 2.2)/3 = 27%

3-7、真题

真题1:

n0 = n2 + 1 

真题2:

真题3:

真题4:

真题5:

真题6:

真题7:

真题8:

真题9:

真题10:

真题11:

四、线索二叉树

每当涉及到求解前驱或者后继就需要将二叉树遍历一次,非常不方便。可以考虑在每个节点中增加两个指针域来存放遍历时得到的前驱和后继信息。但是,增加指针信息会降低存储空间的利用率。

对于一个有n个结点的二叉链表,每个节点都有指向左右孩子的两个指针域,一共有2n个指针域,n个结点的二叉树又有n-1条分支线数,也就是存在2n-(n-1)=n+1个空指针域。因此, 可以用空链域来存放结点的前驱和后继

示例:

中序遍历:B  C  A  D  E 

五、二叉树类别小结

  • 满二叉树
  • 完全二叉树
  • 平衡二叉树
  • 排序二叉树
  • 最优二叉树
  • 线索二叉树

完全二叉树,是,平衡二叉树

六、真题 

真题1:

 真题2:

真题3:

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

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

相关文章

《Java 简易速速上手小册》第10章:Java 未来趋势和新特性(2024 最新版)

文章目录 10.1 Java 的新版本特性10.1.1 基础知识10.1.2 重点案例&#xff1a;使用 Java 14 的 Record 类简化数据模型10.1.3 拓展案例 1&#xff1a;利用 Java 11 的 HTTP Client 进行网络请求10.1.4 拓展案例 2&#xff1a;使用 Java 12 的 Switch 表达式优化代码 10.2 Java …

【在Linux世界中追寻伟大的One Piece】Linux是从哪里来的?又是怎么发展的?基本指令你知道哪些?

目录 1 -> Linux背景 1.1 -> Linux发展史 1.1.1 -> UNIX发展历史 1.1.2 -> Linux发展历史 1.2 -> 开源 1.3 -> 官网 1.4 -> 企业应用现状 1.5 -> 发行版本 1.6 -> OS概念&#xff0c;定位 2 -> Linux下基本指令 2.1 -> Is指令 2…

机器学习系列——(十九)层次聚类

引言 在机器学习和数据挖掘领域&#xff0c;聚类算法是一种重要的无监督学习方法&#xff0c;它试图将数据集中的样本分组&#xff0c;使得同一组内的样本相似度高&#xff0c;不同组间的样本相似度低。层次聚类&#xff08;Hierarchical Clustering&#xff09;是聚类算法中的…

JAVASE进阶:一文精通Stream流+函数式编程

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位大四、研0学生&#xff0c;正在努力准备大四暑假的实习 &#x1f30c;上期文章&#xff1a;JAVASE进阶&#xff1a;源码精读——HashMap源码详细解析 &#x1f4da;订阅专栏&#xff1a;JAVASE进阶 希望文章对你们有所帮助…

Prometheus服务器、Prometheus被监控端、Grafana、监控MySQL数据库、自动发现概述、配置自动发现、Alertmanager

目录 Prometheus概述 部署Prometheus服务器 环境说明&#xff1a; 配置时间 安装Prometheus服务器 添加被监控端 部署通用的监控exporter Grafana 概述 部署Grafana 展示node1的监控信息 监控MySQL数据库 配置MySQL 配置mysql exporter 配置mysql exporter 配置…

Linux network namespace 访问外网以及多命名空间通信(经典容器组网 veth pair + bridge 模式认知)

写在前面 整理K8s网络相关笔记博文内容涉及 Linux network namespace 访问外网方案 Demo实际上也就是 经典容器组网 veth pair bridge 模式理解不足小伙伴帮忙指正 不必太纠结于当下&#xff0c;也不必太忧虑未来&#xff0c;当你经历过一些事情的时候&#xff0c;眼前的风景已…

如何写好一个简历

如何编写求职简历 论Java程序员求职中简历的重要性 好简历的作用 在求职过程中&#xff0c;一份好的简历是非常重要的&#xff0c;它甚至可以直接决定能否被面试官认可。一份出色或者说是成功的个人简历&#xff0c;最根本的作用是能让看这份简历的人产生一定要见你的强烈愿…

面试经典150题——长度最小的子数组

​"In the midst of winter, I found there was, within me, an invincible summer." - Albert Camus 1. 题目描述 2. 题目分析与解析 首先理解题意&#xff0c;题目要求我们找到一个长度最小的 连续子数组 满足他们的和大于target&#xff0c;需要返回的是子数组的…

网安常用的三个攻击方式

1.渗透测试执行标准&#xff08;PTES&#xff09; 渗透测试执行标准由7个部分组成&#xff0c;包括前期交互、情报收集、威胁建模、漏洞分析、渗透利用、后渗透、撰写报告。在中国&#xff0c;渗透测试必须经过授权&#xff0c;否则就违背了网络安全法。前期交互主要指开展渗透…

Codeforces Round 113 (Div. 2)E. Tetrahedron(dp、递推)

文章目录 题面链接题意题解代码总结 题面 链接 E. Tetrahedron 题意 从一个顶点出发走过路径长度为n回到出发点的方案总数 题解 考虑dp f [ i ] [ 0 ∣ 1 ∣ 2 ∣ 3 ] f[i][0|1|2|3] f[i][0∣1∣2∣3]:走了i步&#xff0c;现在在j点的方案总数 转移&#xff1a; f [ i ]…

MySQL:从基础到实践(简单操作实例)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 下载前言一、MySQL是什么&#xff1f;二、使用步骤1.引入库2.读入数据 提交事务查询数据获取查询结果总结 下载 点击下载提取码888999 前言 在现代信息技术的世界…

Python实现MACD指标计算:股票技术分析的利器系列(1)

Python实现MACD指标计算&#xff1a;股票技术分析的利器系列&#xff08;1&#xff09; 介绍核心代码&#xff1a;EMA核心代码&#xff1a;MACD200 次交易日的收盘价格完整代码最终运行代码的效果展示DIFDEAMACD 介绍 先看看官方介绍&#xff1a; MACD (平滑异同平均线&#x…

寒假作业-day9

创建新项目 选择芯片 开启调试 配置时钟 时钟树的配置 工程管理 打开项目 编写代码

字节跳动官方出品AI,白嫖使用GPT4!

关注我&#xff0c;紧跟本系列专栏文章&#xff0c;咱们下篇再续&#xff01; 作者简介&#xff1a;魔都技术专家兼架构&#xff0c;多家大厂后端一线研发经验&#xff0c;各大技术社区头部专家博主&#xff0c;编程严选网创始人。具有丰富的引领团队经验&#xff0c;深厚业务架…

搜索专项---多源BFS模型

文章目录 矩阵距离 一、矩阵距离 本题思路: #include <bits/stdc.h>#define x first #define y secondtypedef std::pair<int,int> PII; constexpr int N1010;int n,m; char g[N][N]; int dist[N][N]; std::queue<PII> q;int dx[4] {-1, 0, 1, 0}, dy[4] …

8868体育助力西甲最新积分榜 皇马4球大胜稳坐榜一

西甲联赛第24轮的四场比赛于2月10日全面收官。其中&#xff0c;皇马在主场迎战吉罗纳队&#xff0c;以4-0的大比分击败对手&#xff0c;将领先优势扩大到5分&#xff0c;稳坐西甲榜首&#xff0c;掌握了争冠的主动权。 威尼修斯的世界波为皇马打开胜利之门&#xff0c;第6分钟就…

机器学习系列——(十四)正则化回归

引言 在机器学习领域&#xff0c;正则化回归是一种常用的技术&#xff0c;旨在解决过拟合问题&#xff0c;提高模型的泛化能力。本文将简单探讨正则化回归的概念、类型和应用&#xff0c;帮助读者更好地理解和运用这一重要技术。 一、概念 正则化回归是一种通过引入额外信息&…

【从零到Offer】MySQL最左匹配

前言 ​ 相信大家在日常开发时&#xff0c;也经常能听到“最左匹配”这个词&#xff0c;那么什么是最左匹配呢&#xff1f;本篇文章就带你一起探索“最左匹配”的神奇秘密。 什么是最左匹配 ​ 最左匹配&#xff0c;通常指的是最左前缀匹配原则&#xff0c;即MySQL在检索数据…

本地搭建three.js官方文档

因为three.js官网文档是国外的网站&#xff0c;所以你没有魔法的情况下打开会很慢&#xff0c;这时我们需要在本地搭建一个官方文档便于我们学习查看。 第一步&#xff1a;首先我们先访问GitHub地址 GitHub - mrdoob/three.js: JavaScript 3D Library. 下载不下来的小伙伴们私…

Offer必备算法06_位运算_十道力扣OJ题详解_由易到难

目录 位运算算法原理 ①力扣191. 位1的个数 解析代码 ②力扣338. 比特位计数 解析代码 ③力扣461. 汉明距离 解析代码 ④力扣136. 只出现一次的数字 解析代码 ⑤力扣260. 只出现一次的数字 III 解析代码 ⑥力扣面试题 01.01. 判定字符是否唯一 解析代码 ⑦力扣26…