数据结构 树

news2024/12/24 21:13:33

在这里插入图片描述
在这里插入图片描述

树的基本概念

树是一种非线性的数据结构,它由节点(node)和边(edge)组成。树的基本概念包括以下要点:

  • 树由一个根节点(root)开始,根节点没有父节点,它可以有零个或多个子节点。
  • 每个节点可以有零个或多个子节点,子节点之间没有顺序关系。
  • 除了根节点之外,每个节点有且仅有一个父节点。
  • 如果一个节点没有子节点,它被称为叶节点(leaf)或终端节点(terminal node)。
  • 节点之间的连接线称为边,边表示节点之间的关系。

树具有层次性的结构,节点和边的关系形成了树的拓扑结构。

二叉树的基本概念与逻辑结构

二叉树是一种特殊的树结构,其中每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的基本概念包括以下要点:

  • 每个节点最多有两个子节点,分别称为左子节点和右子节点。
  • 二叉树中的子树也是二叉树,且子树的位置可以是左子树或右子树。
  • 二叉树的子节点没有顺序关系,即左子节点和右子节点可以互换位置而得到相同的二叉树。

二叉树的逻辑结构可以用递归方式定义为一个节点加上两个二叉树的集合,即:

二叉树 = 节点 + 左子树 + 右子树

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二叉树的存储结构

二叉树的存储结构主要有两种方式:链式存储和顺序存储。

  • 链式存储:每个节点使用一个包含数据和指向左右子节点的指针的结构体来表示。通过指针将各个节点连接起来,形成一个链式结构。链式存储灵活,适用于任意形状的二叉树。

  • 顺序存储:使用数组来表示二叉树的节点,按照层次遍历的顺序存储节点的数据。对于某个节点的索引为i,它的左子节点的索引为2i,右子节点的索引为2i+1。顺序存储简单高效,适用于完全

二叉树。

操作 1:遍历二叉树

遍历二叉树是指按照一定规则访问二叉树的所有节点,常用的遍历方式有三种:

  • 前序遍历(Preorder Traversal):先访问根节点,然后递归地遍历左子树,最后递归地遍历右子树。
  • 中序遍历(Inorder Traversal):先递归地遍历左子树,然后访问根节点,最后递归地遍历右子树。
  • 后序遍历(Postorder Traversal):先递归地遍历左子树,然后递归地遍历右子树,最后访问根节点。

遍历二叉树的操作可以使用递归或栈来实现。

操作 2:线索二叉树

线索二叉树是在二叉树的基础上,利用空指针的空闲域或者指针域指向前驱节点或后继节点,形成一种特殊的二叉树结构。

  • 前序线索二叉树:在前序遍历的过程中,将遍历的路径上的空指针指向前驱或后继节点。
  • 中序线索二叉树:在中序遍历的过程中,将遍历的路径上的空指针指向前驱或后继节点。
  • 后序线索二叉树:在后序遍历的过程中,将遍历的路径上的空指针指向前驱或后继节点。

线索二叉树可以提高遍历二叉树的效率,可以快速找到一个节点的前驱节点或后继节点。

操作 3:哈夫曼树及其应用

哈夫曼树是一种特殊的二叉树,常用于数据压缩和编码算法中。哈夫曼树的特点是权值较大的节点离根节点较近,权值较小的节点离根节点较远。

构建哈夫曼树的步骤:

  1. 将所有节点按照权值从小到大进行排序。
  2. 取出权值最小的两个节点作为左右子节点,构建一个新的父节点,父节点的权值为左右子节点的权值之和。
  3. 将新构建的父节点插入原节点集合中,并删除原来的两个子节点。

重复步骤2和3,直到节点集合中只剩下一个根节点为止。

哈夫曼树的应用主要是通过构建哈夫曼树来实现数据的压缩和解压缩,使得压缩后的数据占用更少的存储空间。

操作 4:二叉树、树和森林相互转换

  • 二叉树转换为树:对于任意一个节点的左子节点,将它的右子节点作为它的兄弟节点,然后将其转化为树结构。
  • 树转换为二叉树:对于任意一个节点的兄弟节点,将它的右兄弟节点作为它的右子节点,然后将其转化为二叉树结构。
  • 森林转换为二叉树:将森林中的每个树转换为二叉树,然后将它们连接起来形成一个二叉树结构。
  • 二叉树转换为森林:将二叉树中的每个子树转换为树结构,然后将它们分离开形成森林。

这些转换操作可以通过调整节点的指针关系来实现,从而在二叉树、树和森林之间相互转换。

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

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

相关文章

华为OD机试之阿里巴巴找黄金(III)(Java源码)

文章目录 阿里巴巴找黄金(III) 阿里巴巴找黄金(III) 题目描述 一贫如洗的椎夫阿里巴巴在去砍柴的路上,无意中发现了强盗集团的藏宝地,藏宝地有编号从0~N的箱子,每个箱子上面贴有一个数字。阿里…

Rancher创建arm架构的下游k8s集群

目录 前言添加自定义集群镜像源配置使用支持ARM架构的docker镜像 前言 费了些时间在成功在华为云arm架构的服务器上搭建了k8s集群,期间问题不断,以下是三个关键点: 确保网络能正常拉取所需镜像拉取的镜像需支持arm架构 否则报错&#xff1a…

SOFAStack 的下一个五年

文|宋顺(GitHub ID:nobodyiam) SOFAStack 社区开源负责人 蚂蚁集团高级技术专家 本文 3861 字 阅读 11 分钟 #01 回顾开源这五年 回想起 2018 年 4 月 19 日 SOFAStack 首次开源,当时的官宣文章中就提到了我们开源的初心&#xf…

C++——map/mutimap再理解

目录 1. map 1.1 map介绍 1.2 map的构造 1.3 map插入和删除 1.4 map的迭代器 1.5 map[ ]运算符重载 1.6 map的查找find 1.7 map的删除erase 1.8 map的其它函数 1.9 map的总结 2. multimap 2.1 multimap的介绍 2.2 mutimap的使用 1. map 1.1 map介绍 1、map是关联…

多窗口通信

1、基本概念 BroadcastChannel接口代理了一个命名频道,可以让指定 origin 下的任意 browsing context 来订阅它。它允许同源的不同浏览器窗口,Tab 页,frame 或者 iframe 下的不同文档之间相互通信。通过触发一个 message 事件,消…

第3讲:使用ajax技术实现异步登录功能(XMLHttpRequest)

封装XMLHttpRequest对象,实现ajax异步登录功能;用三种不同的方法实现登录功能, 方法一:返回文本内容; 方法二:返回JSON格式数据; 方法三:使用fastJSON生成JSON数据,返…

Tensorboard‘s sample_per_plugin

Tensorboard’s sample_per_plugin Tensorboard’s sample_per_plugin controls the step size of the slider. Draw the train images to tensorboard: step 0 writer SummaryWriter() for imgs, labels in train_loader:grid torchvision.utils.make_grid(imgs)writer.…

Android 设计中心 | 助您为各种设备类型轻松打造精彩界面

作者 / Android 开发者体验部设计负责人 Adhithya Ramakumar 和 Android 高级开发者关系工程师 Rebecca Gutteridge 我们推出了 Android 设计中心,帮助开发者更轻松地针对各种类型的设备构建引人注目的界面。 Android 设计中心https://developer.android.google.cn/…

转型内卷下,IT部门如何突围?

在数字化转型极度“内卷”的环境下,传统的IT运维方式无法应对当前的数字化发展需求,在转型过程中,IT部门不但要加深技术与业务的融合,还需要控制成本创造更高的效益。对信息部门的要求进一步提升。 需要明确的是,降本…

废品回收系统开发详细流程--干货分享

废品回收系统的未来可谓是一片光明。随着人们环保意识的不断提高,越来越多的人开始关注废品回收和再利用。这种趋势也在推动着废品回收系统的发展。 目前,各大城市都已经建立了自己的废品回收体系,并且逐渐形成了规模化、产业化运作。同时&a…

EAP如何帮助锂电池厂商提高产品质量?

锂电池作为现代电池技术的重要代表,广泛应用于电动车辆、便携式电子设备和能源储存系统等领域。随着市场竞争的加剧,锂电池厂商越来越注重产品质量的提升,而EAP(Equipment Automation Programming)系统正是帮助锂电池厂…

JavaScript——跟随图片变化改变网页背景

目录 基础模板 引入ColorThief库 获取图片主要颜色 实现渐变效果 JavaScript效果——跟随图片变化改变网页背景&#xff0c;效果如下所示&#xff1a; 基础模板 首先我们准备基础模板&#xff0c;模板代码如下所示&#xff1a; <script setup> import { ref } from…

Chat GPT提示词(prompt )入门指南

prompt 是什么 prompt 是“提示、引导”的意思。在 NLP &#xff08;自然语言处理&#xff09;领域&#xff0c;prompt 通常指的是向预训练模型输入的文本&#xff0c;用于引导生成模型生成指定的文本输出。 prompt 就像是一条指路路线&#xff0c;告诉计算机生成什么样的文本…

戴尔U盘重装系统Win10步骤和详细教程

戴尔电脑深受用户们的喜欢&#xff0c;那么如何使用U盘给戴尔电脑重装Win10系统呢&#xff0c;这让很多用户都犯难了&#xff0c;以下就是小编给大家分享的戴尔U盘重装系统Win10步骤和详细教程&#xff0c;按照这个教程操作&#xff0c;就能顺利完成戴尔U盘重装Win10系统的操作…

Ansys Zemax | 如何建模人体皮肤以及光学心率探测器

光电容积脉搏波法&#xff08;PPG&#xff09;是一种低成本&#xff0c;无创的光学技术&#xff0c;可在皮肤表面进行生理测量。其最广泛的应用之一是商用智能手表和运动手环中包含的可穿戴心率传感器&#xff0c;它在日常环境下可提供舒适和连续的脉搏监测。本文演示了如何在 …

如何做好城市内涝监测工作?

城市内涝是由于降雨量过大、排水设施不足等原因导致的城市地区积水现象&#xff0c;城市内涝是严重影响城市运行和居民生活的自然灾害之一。因此&#xff0c;建立有效的城市内涝监测系统&#xff0c;对于提前发现内涝风险、采取及时的防范和应急措施至关重要。那么如何做好城市…

鼎博梯控MF1卡UID卡修复

物业发了4张卡MF1卡&#xff0c;默认无法修改卡号的&#xff08;当时不知道&#xff09;&#xff1b; 需要交物业费更新日期&#xff0c;手里只有两张卡&#xff0c;另外两个家人拿走了&#xff0c;正好我有修改卡的设备PM6&#xff0c;就准备只升级手里的两张卡&#xff0c;然…

nowcoder--牛客题霸模板速刷101

目录 BM12 单链表的排序 描述 算法思想&#xff1a;归并排序&#xff08;递归&#xff09; 解题思路&#xff1a; BM13 判断一个链表是否为回文结构 描述 方法一 思路 具体步骤 方法二 思路 BM14 链表的奇偶重排 描述 BM15 删除有序链表中重复的元素 描述 BM12 单链表的排…

老游戏的新生:探究二十年前的经典游戏为何再次风靡

随着科技的不断进步和游戏产业的飞速发展&#xff0c;我们每年都能玩到各种新的、惊奇的游戏。但是&#xff0c;在这个繁华快速的行业中&#xff0c;却时常有一些老游戏顽强地生存下来&#xff0c;并且在很多人心中再次引起了巨大的追捧和热情。这些经典游戏往往诞生于20年前或…

数据结构--》深入了解栈和队列,让算法更加高效

本文将带你深入了解数据结构栈和队列&#xff0c;这两种基础的线性数据结构在算法中的重要性不言而喻。我们将会详细介绍栈和队列的概念、分类、实现以及应用场景&#xff0c;在理解栈和队列的基础上&#xff0c;还将探讨如何通过栈和队列来高效地解决算法问题。 无论你是初学者…