【数据结构】前言概况 - 树

🚩纸上得来终觉浅, 绝知此事要躬行。
🌟主页:June-Frost
🚀专栏:数据结构

🔥该文章针对树形结构作出前言,以保证可以对树初步认知。

目录:

  • 🌍前言:
  • 🌎树
    • ✉️相关概念
    • ✉️ 树的存储
    • ✉️ 树的应用
  • 🌏 二叉树
    • ✉️ 特殊二叉树
    • ✉️ 二叉树的存储
  • ❤️ 结语

🌍前言:

 线性结构是一种相对简单的数据结构,元素之间按照一定的顺序排列,每个元素最多有两个接口:前驱和后继。这种结构相对直观,易于理解和管理,类似一种 一对一 的关系。相比之下,树形结构则更为复杂,变为了 一对多 的关系。元素之间的关系不再是简单的线性排列,而是以一个或多个根节点为起点,通过多个分支来连接不同的元素。每个节点可以拥有多个子节点,而且每个子节点可以有任意多的兄弟节点。这种结构需要更多的内存空间来存储元素之间的关系,同时也需要更高级的算法来操作和管理。从复杂性的角度来看,树形结构比线性结构更加复杂
 此外,树的应用广泛,如二叉树、红黑树、B树、哈夫曼树等。在计算机科学中,树的数据结构常常被用于对数据进行组织和存储,以便于高效地实现各种算法和操作。


🌎树

 树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。


 注意:树是递归定义的,在树的定义中,一个树是由一个根节点和若干个子节点组成的,这些子节点本身也是一棵棵树。因此,树的结构和定义是相互嵌套的。通过递归定义,我们可以将一个树的结构描述为一个递归的过程,即每棵子树又包含着一个根节点和若干个子节点,直到叶节点为止。
⚠树形结构中,子树之间不能有交集,否则会成为 图。
例如:

✉️相关概念

以上图①为例:

  • 节点的度:一个节点含有的子树的个数称为该节点的度,如上图:A的为6。

  • 叶节点或终端节点:度为0的节点称为叶节点,如上图:B、C、H、I…等节点为叶节点。

  • 非终端节点或分支节点:度不为0的节点,如上图:D、E、F、G…等节点为分支节点。

  • 双亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点,如上图:A是B的父节点。

  • 孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点,如上图:B是A的孩子节点。

  • 兄弟节点:具有相同父节点的节点互称为兄弟节点,如上图:B、C是兄弟节点。

  • 树的度:一棵树中,最大的节点的度称为树的度,如上图:树的度为6。

  • 节点的层次:从根开始定义起,根为第1层,根的子节点为第2层,以此类推。

  • 树的高度或深度:树中节点的最大层次,如上图:树的高度为4

  • 堂兄弟节点:双亲在同一层的节点互为堂兄弟,如上图:H、I互为兄弟节点。

  • 节点的祖先:从根到该节点所经分支上的所有节点,如上图:A是所有节点的祖先。

  • 子孙:以某节点为根的子树中任一节点都称为该节点的子孙,如上图:所有节点都是A的子孙。

  • 森林:由m(m>0)棵互不相交的树的集合称为森林。

✉️ 树的存储

 树的存储中既要保存值域,也要保存结点和结点之间的关系,有很多存储结构。例如:双亲表示法,孩子表示法、孩子双亲表示法以及孩子兄弟表示法等

🌟孩子兄弟表示法(LCRS)


🌟双亲表示法

 在每一个节点中,存储其父节点的下标。这样就可以将树中各节点的结构关系表示出来,也可以快速地对父节点进行访问。

✉️ 树的应用

 树形结构的应用非常广泛。如:

  1. 数据库中的索引:数据库系统使用树形结构来实现索引,以提高数据访问效率。
  2. 电子邮件系统:电子邮件系统中的邮件通常是通过树形结构进行组织和管理的,每个邮件可以有多个回复或转发,形成一个树形结构。
  3. 编译器中的语法树:编译器将源代码解析为语法树,其中每个节点表示特定的语法结构,如一个函数、一个循环或一个条件语句。
  4. 文件系统的目录树结构。

 在实践当中,用的最多的树是二叉树。

🌏 二叉树

 一棵二叉树是结点的一个有限集合,该集合可以为空,也可以由一个根节点加上两棵别称为左子树和右子树的二叉树组成。

 对于任意的二叉树都是由以下几种情况复合而成的:

例如:

注意:

  1. 二叉树不存在度大于2的结点
  2. 由于二叉树最多有2个孩子,为了区分概念,就定义了左孩子和右孩子,所以二叉树的子树有左右之分,次序不能颠倒 —— 二叉树是有序树

✉️ 特殊二叉树

🌟满二叉树
 一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。如果一个满二叉树的层数为K,结点总数就是2h-1,同样的,如果一个满二叉树的节点总数为N,则层数为log2(N+1)
🌟满二叉树
  假设有h层,前h-1层都是满的,最后一层不一定满,节点从左到右连续。要注意的是满二叉树是一种特殊的完全二叉树。假设有h层,则完全二叉树的节点范围为 [ 2(h-1) , 2h - 1]
🌟一些性质:

  1. 若规定根节点的层数为1,则一棵非空二叉树的第i层上最多有2(i-1)个结点.
  2. 若规定根节点的层数为1,则深度为h的二叉树的最大结点数是2h-1.
  3. 对任何一棵二叉树, 如果度为0的其叶结点个数为n0, 度为2的分支结点个数为n2 ,则有 n0= n2+1

✉️ 二叉树的存储

 二叉树的存储结构通常可以采用顺序存储和链式存储两种。

  1. 链式存储:对于一般的二叉树,通常采用链式存储方式。每个节点包含三个字段:数据域、左孩子指针和右孩子指针。数据域用于存储节点的值,左孩子指针指向该节点的左子节点,右孩子指针指向该节点的右子节点。如果某个节点没有子节点,对应的指针就为空(NULL)。
  2. 顺序存储:对于完全二叉树,可以直接使用数组进行存储,将根节点存储在索引为1的位置,然后按照层次顺序从左到右,从上到下,对每个节点赋予一个唯一的索引。这种存储方式对于完全二叉树来说,可以节省存储空间,并且可以通过索引快速访问节点。

 📚顺序存储结构和链式存储结构各有优劣,需要根据实际应用场景和需求来选择使用哪种存储方式。如果需要频繁查找且表的长度变化不大,可以使用顺序存储结构;如果需要频繁插入和删除操作且表的长度变化较大,使用链式存储结构可能会更好。


❤️ 结语

 文章到这里就结束了,如果对你有帮助,你的点赞将会是我的最大动力,如果大家有什么问题或者不同的见解,欢迎大家的留言~

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

极光笔记 | 推送服务数据中心选择:合规性与传输效率的双重考量

随着全球化进程的深入,跨境数据传输与存储问题已经变得愈发重要。推送服务的数据中心节点选择不仅关乎数据访问速度和用户体验,同时也直接牵扯到数据合规性和安全保障。EngageLab Push深知这一点,为了满足更多国际客户和全球用户触达需求&…

将本地jar包手动添加到Maven仓库依赖处理

一、起因 在日常开发中,经常会遇到一些情况,就是在更新Maven时,从网上下载jar包的时候网络不稳定或者其他原因导致jar包数据缺失而导致的依赖无法正常引入的情况. 还有一些其他情况如个人jar包一类的。 二、解决 以前以上这些情况&#x…

Android12之/proc/pid/status参数含义(一百六十五)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

微服务·数据一致-seata

微服务数据一致-seata 概述 Seata(Simple Extensible Autonomous Transaction Architecture)是一个开源的分布式事务解决方案,旨在帮助应用程序分布式事务管理的挑战。Seata提供了一套全面的工具和框架,可用于实现跨多个数据库和…

网络安全之认识网络安全网格架构(CSMA)

“网络安全网格(CyberSecurity Mesh)”是 Gartner 提出的网络安全技术发展新趋势,近两年连续入选其年度重要战略技术趋势研究报告,成为当前网络安全领域流行的热词,受到网络安全从业者的高度关注。 一、概念产生的背景…

软件测试/测试开发丨Web自动化 PageObject设计模式

点此获取更多相关资料 本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接:https://ceshiren.com/t/topic/27167 一、page object 模式简介 马丁福勒个人博客 selenium 官网 1.1、传统 UI 自动化的问题 无法适应 UI 频繁变化无法清晰表达业务用例场景大量的样…

python 学习笔记(5)——SMTP 使用QQ邮箱发送邮件

目录 发送邮件 1、准备工作: 2、发送纯文本信息内容: 3、发送 HTML 格式的内容: 4、发送带附件的邮件: 5、群发(一个邮件,发给多个人): 发送邮件 以下都 以 QQ邮箱 为发送方举…

Nginx+Tomcat(多实例)实现动静分离和负载均衡

一、Tomcat 多实例部署 1.在安装好jdk环境后,添加两例tomcat服务 #解压安装包 cd /opt tar zxvf apache-tomcat-9.0.16.tar.gz#移动并复制一例 mkdir /usr/local/tomcat mv apache-tomcat-9.0.16 /usr/local/tomcat/tomcat1 cp -a /usr/local/tomcat/tomcat1 /usr…

记录一次开机内存分析的全过程

作者:zzy的学习笔记 记录一次开机内存分析的全过程,尽量详尽的介绍常用内存分析工具和命令行的使用,结合具体问题探讨开机内存分析的实践经验。通过这篇文章我会介绍开机内存的常用测试分析工具的基本使用方法,以及如何通过抓取出…

在Ubuntu上建立博客网站,利用Cpolar+Inis快速实现专业写作

文章目录 前言1. Inis博客网站搭建1.1. Inis博客网站下载和安装1.2 Inis博客网站测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar临时数据隧道2.2 Cpolar稳定隧道(云端设置)2.3.Cpolar稳定隧道(本地设置) 3. 公网访问测试总…

springboot+redis

1.pom.xml <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency> 2.yml配置 # redis 配置redis:host: 127.0.0.1#超时连接timeout: 1000msjedis:pool:#最大连…

盲打键盘的正确指法指南

简介 很多打字初学者&#xff0c;并不了解打字的正确指法规范&#xff0c;很容易出现只用两根手指交替按压键盘的“二指禅”情况。虽然这样也能实现打字&#xff0c;但是效率极低。本文将简单介绍盲打键盘的正确指法&#xff0c;以便大家在后续的学习和工作中能够提高工作效率…

Pytorch Advanced(三) Neural Style Transfer

神经风格迁移在之前的博客中已经用keras实现过了&#xff0c;比较复杂&#xff0c;keras版本。 这里用pytorch重新实现一次&#xff0c;原理图如下&#xff1a; from __future__ import division from torchvision import models from torchvision import transforms from PIL…

2024年java面试--mysql(2)

系列文章目录 2024年java面试&#xff08;一&#xff09;–spring篇2024年java面试&#xff08;二&#xff09;–spring篇2024年java面试&#xff08;三&#xff09;–spring篇2024年java面试&#xff08;四&#xff09;–spring篇2024年java面试–集合篇2024年java面试–redi…

FPGA实战小项目3

基于FPGA的波形发生器 基于FPGA的波形发生器 基于FPGA的beep音乐播放器设计 基于FPGA的beep音乐播放器设计 基于FPGA的cordic算法实现DDS sin和cosine波形的产生 基于FPGA的cordic算法实现DDS sin和cosine波形的产生

iframe 实现跨域,两页面之间的通信

一、 背景 一个项目为vue2&#xff0c;一个项目为vue3&#xff0c;两个不同的项目实现iframe嵌入&#xff0c;并实现通信 二、方案 iframe跨域时&#xff0c;iframe组件之间常用的通信&#xff0c;主要是H5的possmessage方法 三、案例代码 父页面-vue2&#xff08;端口号为…

JWT 使用教程 授权 认证

JWT 1.什么是JWT JSON Web Token (JWT) is an open standard (RFC 7519) that defines a compact and self-contained way for securely transmitting information between parties as a JSON object. This information can be verified and trusted because it is digitally s…

轻松搭建本地知识库的ChatGLM2-6B

近期发现了一个项目&#xff0c;它的前身是ChatGLM&#xff0c;在我之前的博客中有关于ChatGLM的部署过程&#xff0c;本项目在前者基础上进行了优化&#xff0c;可以基于当前主流的LLM模型和庞大的知识库&#xff0c;实现本地部署自己的ChatGPT&#xff0c;并可结合自己的知识…

Zabbix登录绕过漏洞复现(CVE-2022-23131)

0x00 前言 最近在复现zabbix的漏洞&#xff08;CVE-2022-23131&#xff09;&#xff0c;偶然间拿到了国外某公司zabbix服务器。Zabbix Sia Zabbix是拉脱维亚Zabbix SIA&#xff08;Zabbix Sia&#xff09;公司的一套开源的监控系统。该系统支持网络监控、服务器监控、云监控和…

C# Winform 简单排期实现(DevExpress TreeList)

排期的需求在很多任务安排的系统中都有相应的需求&#xff0c;原生的Winform控件并未提供相应的控件&#xff0c;一般都是利用DataGridViewTreeView组合完成相应的需求&#xff0c;实现起来比较麻烦。用过DevExpress控件集的开发者应该知道&#xff0c;DevExpress WinForm提供了…