【数据结构-树和二叉树-森林-哈夫曼树】

news2024/10/2 10:41:49

目录

  • 1 树
    • 1.1 树的描述(基本术语)
  • 2 二叉树(树的度最大为2)
    • 2.1 注意事项-五种基本形态
    • 2.2 二叉树的抽象数据类型定义
  • 3 二叉树的性质
    • 3.1 两种特殊形式的二叉树-重点会计算
    • 3.2 题目练习:
  • 4 二叉树的存储结构
    • 4.1 顺序存储结构
    • 4.2 链式存储结构
  • 5 遍历二叉树和线索二叉树
    • 5.1 一般是三种遍历顺序(先左后右)
      • 5.1.1 中序-递归法
      • 5.1.2 中序-非递归法
    • 5.2 由遍历顺序确定唯一二叉树
      • 5.2.1 题目练习
    • 5.3 线索二叉树
      • 5.3.1 遍历线索二叉树
  • 6 树和森林
    • 6.1 树的存储结构
    • 6.2 树的遍历
    • 6.3 森林
    • 6.4 深林的遍历
    • 6.5 森林与二叉树的转换
      • 6.5.1 树与二叉树的转换
        • 树和二叉树转换 题目练习
      • 6.5.2 森林与二叉树的转换
        • 森林-二叉树 题目练习
  • 7 哈夫曼树

学习笔记记录

1 树

 什么是树?树是一种非线性的结构,树和子树是相对的概念,例如A的子树有B,C,D。但是B的子树有E,F,因此相对于E,F而言,B也是一棵树,即在树的定义中又用到树的定义,其结构定义是一种递归的定义,它道出了树的固有特性,类似于下图:
在这里插入图片描述
在这里插入图片描述

1.1 树的描述(基本术语)

 有了树的结构,但是我们怎么描述这个树呢?而且要通俗易懂,所以术语就应运而生:
在这里插入图片描述

2 二叉树(树的度最大为2)

   二叉树本身就是树的一种,所以上面的树的术语完全适用于二叉树。

2.1 注意事项-五种基本形态

在这里插入图片描述

2.2 二叉树的抽象数据类型定义

 一般包三个方面:
ADT BinaryTree{
数据对象D:…
数据关系R:…
数据操作P:重点:}

3 二叉树的性质

  • 在二叉树的 第i层上至多有 2 i − 1 2^{i-1} 2i1个结点.
  • 深度为k的 二叉树至多有 2 k − 1 2^k-1 2k1 个结点 (k>=1).
  • 对任何一棵二叉树T, 如果其终端结点数(叶子)为n0,度为2的结点数为n2,则 n 0 = n 2 + 1 n_0 = n_2+1 n0=n2+1。(证明)

1.对于整个树就是由度为0(叶子),度为1,度为2的节点组成,也就是
n = n 0 + n 1 + n 2 . n = n_0+n_1+n_2. n=n0+n1+n2.

2.而且n0节点射出0条线,n1节点射出1条线,n2 节点射出2线,则总的射出线条是:
n o u t = 0 ∗ n 0 + 1 ∗ n 1 + 2 ∗ n 2 = 1 ∗ n 1 + 2 ∗ n 2 \begin{align} n_{out} &= 0*n_0+1*n_1+2*n_2 \\ &= 1*n_1+2*n_2 \\ \end{align} nout=0n0+1n1+2n2=1n1+2n2
3.对于每个节点而言,除了根节点,每个节点都会被插入一条线,所以:节点数n=插入的总线数+1
n = n i n + 1 \begin{align} n &= n_{in} +1 \\ \end{align} n=nin+1
4.插入总线数=射入总线数=n1+2*n2;
n i n = n o u t \begin{align} n_{in} &= n_{out} \\ \end{align} nin=nout
5.可以得到:
n = n 0 + n 1 + n 2 = n i n + 1 = n o u t + 1 = n 1 + 2 n 2 \begin{align} n &= n_0+n_1+n_2 =n_{in}+1=n_{out}+1=n_1+2n_2\\ \end{align} n=n0+n1+n2=nin+1=nout+1=n1+2n2
即: n 0 = n 2 + 1 n_0=n_2+1 n0=n2+1

3.1 两种特殊形式的二叉树-重点会计算

  • 例如:完全二叉树有节点1001个,求叶子节点有多少个?,注意n1只有两种情况,n1=1或者n1=0;

在这里插入图片描述

3.2 题目练习:

在这里插入图片描述
哈夫曼树没有度为1的节点,也就是n1=0;

4 二叉树的存储结构

4.1 顺序存储结构

  适合完全二叉树,由二叉树的性质可知,由一个节点 i 我们可以找到他的双亲,左右子节点;如下图:i=1时,直接没有双亲算根节点;例如现在有一个i=2的节点,让你找他的双亲肯定是i/2=1;找他的左孩子就是2i=4,右孩子就是2i+1=5;想一个问题?为什么i的右边是i+1,而 i 的下一层是2i?
这个是因为其是2叉树,层与层之间的关系一定是2倍的关系,所以对于三叉树,也可以有类似的性质,不过对于三叉树而言,其3i是位于中间;

非完全二叉树也可以用顺序存储结构进行存储,不过会浪费存储空间;
在这里插入图片描述

4.2 链式存储结构

  二叉树的链表中的结点至少包含 3 个域:数据域和左、 右指针域,如图 5.9 (b) 所示。有时,为了便于找到结点的双亲,还可在结点结构中增加一个指向其双亲结点的指针域.
在这里插入图片描述

5 遍历二叉树和线索二叉树

5.1 一般是三种遍历顺序(先左后右)

  有先序DLR,中序LDR,和后续LRD的三种遍历方式;这里拿中序举例,对算法程序进行介绍:,如果按照层的形式进行读取,也就是从上到下,从左到右,可以进行队列的设计进行读取,这里采用栈的形式进行遍历是从左到右,没有限定从上到下;

5.1.1 中序-递归法

在这里插入图片描述

5.1.2 中序-非递归法

在这里插入图片描述

5.2 由遍历顺序确定唯一二叉树

  由先序+中序或者后续+中序均能唯一的确定一颗二叉树,其中确定的本质就是利用二叉树的定义是一个递归定义,以及先序是先读取的根,所以由先序可以先确定根,然后再由中序确定左右子树,依次确定即可:

5.2.1 题目练习

在这里插入图片描述

5.3 线索二叉树

  就拿中序而讲,一个节点是有五个域,其中分别是:左孩子指针,左孩子标志,节点数据域,右孩子标志位,右孩子指针。线索化二叉树其实就是把树先排序,然后前驱后继就出来了,也就是吧节点的空余指针利用起来,如果左孩子为为空,则指向前驱,如果右孩子为空则指向后继;

5.3.1 遍历线索二叉树

  待补充;遍历顺序由先序线索遍历,中续线索遍历和后续线索遍历。

6 树和森林

  树和森林的遍历,以及森林和二叉树的联系;对于二叉树有四种遍历方式,DLR,LDR,LRD和层次遍历,但是对于树而言,就不同了,这里要注意区别;树只有先根、后根和层次遍历,没有中序,例如5叉树,你一个根有五个节点,那么那个是中间的呢?

6.1 树的存储结构

  有很多存储结构,下面这三种是长常用的;

  • 双亲法待补充
  • 孩子法待补充
  • 孩子兄弟法待补充

6.2 树的遍历

  树的遍历可以类比二叉树的遍历,就是树的遍历少了一种中序遍历;

在这里插入图片描述

6.3 森林

  森林是指由零个或多个树组成的一个有序集合,其实其定义还是一个递归的定义,因为好多树,我拿出来一个,剩余的也是森林,再从这个森林里面拿出一个树,剩余的仍然是一个森林。森林可分为三部分:
在这里插入图片描述#pic_center

6.4 深林的遍历

  一般有三种遍历方式,就是先序,中序和后序遍历;
  先序遍历就是对深林中的每颗树都进行先序遍历,从左往右
  中序遍历就是从左往右依次对深林中的树进行后根遍历(注意与森林和树中,中序的区别)
  森林的中序遍历是指依次对森林中的每棵树进行后根遍历,而森林的后序遍历是指先对森林中的每棵树进行后根遍历,然后再对根结点进行访问

6.5 森林与二叉树的转换

  树的遍历可以类比二叉树的遍历,就是树的遍历少了一种中序遍历;

6.5.1 树与二叉树的转换

  由树转换成二叉树,记住一句口诀:兄弟相连留长子,转45度
  由二叉树转树,记住一句口诀:左孩右-右连双亲,去掉原来右孩线

树和二叉树转换 题目练习

在这里插入图片描述
在这里插入图片描述
去掉白线就是答案;

6.5.2 森林与二叉树的转换

  由森林转换成二叉树,记住一句口诀:树转二叉根相连
  由二叉树转深林,记住一句口诀:去掉全部右孩线,孤立二叉再还原

森林-二叉树 题目练习

在这里插入图片描述

7 哈夫曼树

  哈夫曼树也称为最优树,其基本术语有:哈夫曼树(Huffman Tree)又称最优二叉树,是一种带权路径长度最短的二叉树。

它具有以下几个基本概念:

  1. 权值(Weight):表示每个节点的重要性或出现频率等数值。
  2. 带权路径长度(Weighted Path Length):从树的根节点到某一叶子节点的路径上各节点权值的总和。
  3. 构建过程:通过对给定的一组权值进行构造,使得构建出的哈夫曼树的带权路径长度总和最小。
  4. 特点
    • 每个非叶子节点都有两个子节点。
    • 叶子节点代表具体的字符或数据。

哈夫曼树在数据压缩、编码等领域有广泛应用,其主要优点是能有效地减少编码长度,提高数据的存储和传输效率。
在这里插入图片描述
实现-构造-编码后续补充

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

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

相关文章

卷积神经网络(CNN)基础

目录 卷积神经网络介绍 卷积神经网络原理 卷积层:通过在原始图片上平移来提取特征 激活层:增加非线性分割能力 池化层polling(下采样层):减少学习参数,去掉不重要的样本,降低网络的复杂度 卷…

面试(06)————MySQL篇

目录 问题一:在MySQL中,如何定位慢查询? 方案一:开源工具 方案二:MySQL自带慢日志 模拟面试 问题二:这个SQL语句执行很慢,如何分析的呐? 模拟面试 问题三:了解过索引…

【GlobalMapper精品教程】076:基于高程和影像数据创建电子沙盘(真实三维地形)

影像与数字高程模型叠加,可以构建三维真是地形。本文讲解在Globalmapper中基于高程和影像数据创建电子沙盘(真实三维地形)。 文章目录 一、加载数据二、创建三维网格三、三维叠加显示一、加载数据 本实验的数据(配套实验数据资料包中的data076.rar,订阅专栏,获取全文及数…

Java Web 网页设计(1)

不要让追求之舟停泊在幻想的港湾 而应扬起奋斗的风帆 驶向现实生活的大海 网页设计 1.首先 添加框架支持 找到目录右键添加 找到Web Application选中 点击OK 然后 编辑设置 找到Tomcat--local 选中 点击OK 名称可以自己设置 找到对应文件夹路径 把Tomcat添加到项目里面 因为…

分享几个申请免费SSL证书的平台

随着数字网络蓬勃发展,人们在享受互联网时代带来的便利生活外,网络安全问题也是日益变得严重;越来越多企业或个人选择通过安装SSL证书来保护网站的数据安全和提高企业的品牌形象,好在很多证书服务机构都有提供免费SSL证书申请的服…

【机器学习-15】决策树(Decision Tree,DT)算法介绍:原理与案例实现

前言 决策树算法是机器学习领域中的一种重要分类方法,它通过树状结构来进行决策分析。决策树凭借其直观易懂、易于解释的特点,在分类问题中得到了广泛的应用。本文将介绍决策树的基本原理,包括熵和信息熵的相关概念,以及几种经典的…

Modern CSV for Mac:强大的CSV文件编辑器

Modern CSV for Mac是一款功能强大的CSV文件编辑器,专为Mac用户设计,提供直观易用的界面和丰富的功能,使用户能够轻松编辑和管理CSV文件。 Modern CSV for Mac v2.0.6激活版下载 这款软件支持快速导入和导出CSV文件,方便用户与其他…

Docker - Compose

原文地址,使用效果更佳! Docker - Compose | CoderMast编程桅杆Docker - Compose 在部署应用时,常常使用到不止一个容器,那么在部署容器的时候就需要一个一个进行部署,这样的部署过程也相对来说比较繁琐复杂&#xff…

​「Python大数据」VOC数据清洗

前言 本文主要介绍通过python实现数据清洗、脚本开发、办公自动化。读取voc数据,存储新清洗后的voc数据数据。 一、业务逻辑 读取voc数据采集的数据批处理,使用jieba进行分词,去除停用词,清洗后的评论存储到新的列中保存清洗后的数据到新的Excel文件中二、具体产出 三、执…

实验 2--创建数据库和表

文章目录 实验 2--创建数据库和表实验目的3.3.2 实验准备3.3.3 实验内容2.在 SSMS 图形界面中创建和删除数据库和数据表。(1)在 SSMS 图形界面中创建 YGKQ 数据库;(2)在 SSMS 图形界面中删除 YGKQ 数据库;(3)在 SSMS 图形界面中创建、删除 BMXX表;(4)在 SSMS 图形界面中分别创建…

【探讨】RocketMQ消息灰度方案-消息逻辑隔离

vivo 鲁班平台 RocketMQ 消息灰度方案 - 稀土掘金分布式- vivo鲁班RocketMQ平台的消息灰度方案MQ消息在生产环境和灰度环境隔离一般怎么实现?消息隔离的原则 中心正常消费者,可以同时消费正常的消息和特定标签的消息(自动识别);特定标签的消费者,只能消费特定标签的消息。灰…

连连看游戏页面网站源码

首页,可以上传自己喜欢的图片 游戏页面 通关页面

Python程序设计 字典

教学案例十 字典 1. 判断出生地 sfz.txt文件中存储了地区编码和地区名称 身份证的前6位为地区编码,可以在sfz.txt文件中查询到地区编号对应的地区名称 编写程序,输入身份证号,查询并显示对应的地区名称 若该地区编码不在文件中,…

MapReduce——ReudceTask并行度决定机制

MapReduce——ReudceTask并行度决定机制 1. Reduce任务的数量(reduce task count): 这是最基本的决定因素之一。在作业启动时,用户可以指定Reduce任务的数量。更多的Reduce任务意味着更多的并行度,因为每个Reduce任务…

【大模型应用极简开发入门(2)】GPT模型简史:从GPT-1到GPT-4:从小数据量的微调到大数据量的强化学习不断优化模型

文章目录 一. GPT-1:无监督与微调1. 在GPT-1之前的监督学习的问题2. GPT-1中新的学习过程-无监督的预训练3. 复杂任务下的微调4. GPT-1为更强大的模型铺平了道路 二. GPT-2:context learning1. 核心思想:context learning2. GPT-2的数据集 三…

【面试经典 150 | 数组】罗马数字转整数

文章目录 写在前面Tag题目来源解题思路方法一:模拟 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更…… 专栏内容以分析题目为主,并附带一些对于本题涉及到的数据结构等内容进行回顾…

IoT、IIoT、AIoT的区别是什么?

一、IoT、IIoT、AIoT的区别是什么? IoT、IIoT和AIoT都是物联网(Internet of Things)的不同应用和发展方向,但它们之间存在一些区别。 IoT(物联网):物联网是指通过互联网连接各种物理设备&#x…

RIP最短路实验(思科)

华为设备参考:RIP最短路实验(华为) 一,技术简介 RIP(Routing Information Protocol,路由信息协议)是一种基于距离矢量的内部网关协议,工作原理是每个路由器周期性地向邻居路由器发…

GPT-3.5 Turbo 的 temperature 设置为 0 就是贪婪解码?

🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 将 GPT-3.5 Turbo 的 temperature 设置为 0 通常意味着采用贪婪解码(greedy decoding)策略。在贪婪解码中,模型在每一步生成文本时选择概率最高的词元,从…

LeetCode题练习与总结:矩阵置零--73

一、题目描述 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1: 输入:matrix [[1,1,1],[1,0,1],[1,1,1]] 输出:[[1,0,1],[0,0,0],[1,0,1]]示例 2&#xf…