【数据结构】树

news2024/11/16 11:51:00

树(Tree)

知识框架

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WYmyYLsB-1672801792104)(C:\Users\dell\AppData\Roaming\Typora\typora-user-images\1672801133685.png)]

树的定义

树和图一样都是非线性结构,树是n个结点的有限集合,当n=0时,称这棵树为空树。 非空树有以下特征:

  • 有且仅有一个称为根的结点。
  • 如果n>1, 除根结点以外其它结点可以分为m(m>0)个不相交的集合T1,T2,T3,T4,…,Tm,其中每一个集合都是一棵树。树T1, T2, T3,…,Tm称为这棵对的子树。

下图是一棵普通的树

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gype2hAm-1672801792106)(C:\Users\dell\AppData\Roaming\Typora\typora-user-images\1672801217527.png)]

树的相关术语

  • 节点:树是由有限个元素组成的集合,每人元素都称作一个节点,上图A、B、 C、 D、 E、 F、G、H、I等都是树的节点;
  • 节点的度:一个节点含有的子树的个数称为该节点的度;
  • 叶节点或终端节点:度为0的节点称为叶节点,D,E,C,G都是叶节点;
  • 非终端节点或分支节点:度不为0的节点;
  • 子节点(孩子节点): 一个节点含有的子树的根节点称为该节点的子节点;
  • 父节点(双亲节点):若一个节点含有子节点,则这个节点称为其子节点的父节点;
  • 兄弟节点:具有相同父节点的节点互称为兄弟节点;
  • 堂兄弟节点:双亲在同一层的节点互为堂兄弟;
  • 节点的祖先:从根到该节点所经分支上的所有节点;
  • 子孙节点:以某节点为根的子树中任一节点都称为该节点的子孙;
  • 森林:由m(m>=0)棵互不相交的树的集合称为森林;
  • 树的度:一棵树中,最大的节点的度称为树的度;
  • 节点的层次:从根开始定义起,根为第1层,根的子节点为第2层,以此类推;
  • 树的高度或深度:树中节点的最大层次;

树的分类

  • 有序树:树的各个子树的顺序是固定的,不能随意改变顺序。
  • 无序树:树的各个子树的顺序可变。
  • 二叉树: 每个节点最多只能有两个子节点的树称为二叉树,二叉树是有序树,左右子树的顺序不能改变。二叉树又可以分为满二叉树和完全二叉树。
  • B树
  • 霍夫曼树

树的存储结构

计算机的内存是线性的, 而树是非线性的数据结构,如何将非线性的树状结构在线性的内存中存储起来,这是一个值得探讨的问题。目前主要有以下几种存储方式:

双亲表示法

  • 实现:通常用一个二维数组,在存储结点的同时也将对应节点的父节点存储进来。
  • 特点:找父节点容易、找子节点难。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xewA1PNU-1672801792107)(C:\Users\dell\AppData\Roaming\Typora\typora-user-images\1672801347383.png)]

孩子表示法

  • 实现:每个结点都存储在一个二维数组的第一列里面,多个子节点之间以链表方式连接,最后一个子节点的指向为NULL,数组的第二个元素指向其子节点链表的起始地址。
  • 特点:找子节点容易,找父节点难。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PcMV8m7s-1672801792107)(C:\Users\dell\AppData\Roaming\Typora\typora-user-images\1672801367040.png)]

双亲孩子表示法

  • 实现:将双亲表示法与孩子表示法综合起来,既存储父节点的下标,又指向子节点链表。
  • 特征:找父节点与子节点都比较方便,但相对前面两种复杂度有一定程度的提升。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JpaGhqMX-1672801792107)(C:\Users\dell\AppData\Roaming\Typora\typora-user-images\1672801403328.png)]

二叉树存储

  • 二叉树存储就是将普通的树转换成二叉树后再进行存储,二叉树的存储将另作讨论。
  • 将普通树转换成二叉树有一个方法,左孩子右兄弟法,就是说从根节点开始,每个节点的左子节点存储它的一个孩子,右子节点存储它的一个兄弟,如下图所示:
    在这里插入图片描述

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

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

相关文章

E4445A频谱分析仪

18320918653 E4445A 名称:E4445A 频谱分析仪, 3 Hz - 13.2 GHz 详细:主要技术指标 性能 /-0.24 dB幅度精度 -155 dBm/Hz显示的平均噪声电平(DNAL) 10 kHz偏置时的相噪:-118 dBc/Hz 81 dB W-CDMA AC…

春节倒计时,让我来秀一手:用Python制作一个对联生成器

前言 跨年跨完了,马上就要迎来春节了,这不得秀一手? 那就直接开始春节的表演呗 勉勉强强来用python制作对联生成器吧 效果展示 这里的话,你自己想要啥春联主题是可以搜索滴,有些地方也是可以看着改的,…

FPGA知识汇集-FPGA的低功耗设计方法总结

精确的热分析在很多电子产品设计中都有着举足轻重的作用,在高端的PCB设计中尤为突出。热分析的结果常常会影响PCB的机械层设计和产品的外壳设计:是否需要安装散热片、散热风扇等。如果安装散热风扇,往往需要降低其噪音,这将使得机械层设计变得…

【OpenAI】What Is ChatGPT

文章目录介绍注册介绍 OpenAI发布了一个全新的聊天机器人模型—— ChatGPT,同时这也是继GPT-3.5 系列的主力模型之一 ChatGPT 测试地址: https://chat.openai.com/auth/login https://gpt.chatapi.art/ ChatGPT官方说明: Optimizing Langua…

【自学Java】Java语言数组遍历

Java语言数组遍历 Java语言数组遍历教程 Java 语言 中如果我们定义好了数组,并且给数组设置了值,那么怎么样访问数组呢?怎么样获取数组里面的数据值呢?我们可以使用 for 来遍历数组,获取每个位置上的值。 Java语言数…

谷粒学院——第十四章、微信扫码登录

准备工作 注册开发者资质 官网:https://open.weixin.qq.com/ 尚硅谷分享 wx:open:# 微信开放平台 appidappid: wxed9954c01bb89b47# 微信开放平台 appsecretappsecret: a7482517235173ddb4083788de60b90e# 微信开放平台 重定向url(guli.shop需要在微…

腾讯云存储

文章目录一、开通腾讯云存储1.注册腾讯云账号,开通对象服务2. 创建存储桶3.获取SecretId 和 SecretKey提示:以下是本篇文章正文内容,下面案例可供参考 一、开通腾讯云存储 在项目钟的图片以及文件需要归档存储。如果归档文件只保存到服务器…

WebRTC学习总结

WebRTC (Web Real-Time Communications) 是一项实时通讯技术,它允许网络应用或者站点,在不借助中间媒介的情况下,建立浏览器之间点对点(Peer-to-Peer)的连接,实现视频流和(或)音频流…

二十五、Docker (1)

🌻🌻 目录一、Docker的概述1.1 为什么要去学习Docker1.2 Docker 概述1.3 Docker的历史1.4 Docker 官网1.5 Docker能做什么1.6 DevOps(开发、运维)二、Docker安装启动(官网)2.1 Docker 架构2.1.1 镜像(image)2.1.2 容器…

DICOM 图像传输:使用 LeadTools 实现 C-Store SCP 服务

文章目录开发环境创建 Qt Widgets 程序设计界面配置 LeadTools 路径编写代码使用 LDicomNet 实现 SCP 的步骤日志输出编写 SCP Server 类编写 SCP Client 类启动 LDicomNet 及启动监听编译程序运行程序发布与部署测试程序界面美化参考开发环境 LeadTools 17Qt 5.15.2 MSVC2019…

【Linux】进程间通信(万字详解) —— 上篇

🎇Linux: 博客主页:一起去看日落吗分享博主的在Linux中学习到的知识和遇到的问题博主的能力有限,出现错误希望大家不吝赐教分享给大家一句我很喜欢的话: 看似不起波澜的日复一日,一定会在某一天让你看见坚持…

谷粒学院——第九章、阿里云视频点播

阿里云视频点播 开通 地址: 上传测试 开通以后,点击控制台,然后选择音/视频: 注意:先点击启用存储地址再上传。 添加转码模版: 开发文档 官方地址:https://help.aliyun.com/p…

批量统计不同块的数量

CAD收集块的数量一般采用FI等命令,或者使用天正等软件,这些方法或多或少都存在某些问题。这时就可以编写插件满足不同场景的使用。已应用到实际工作中。 一、界面及其功能 采用c#制作cad插件,框选待统计范围,直接输出到表格中&…

数据库连接超时的处理

报错信息:Caused by: java.sql.SQLTransientConnectionException: HikariPool-1 - Connection is not available, request timed out after 30000ms.at com.zaxxer.hikari.pool.HikariPool.createTimeoutException(HikariPool.java:695)at com.zaxxer.hikari.pool.H…

Java高手速成 | 数据库实训:图书馆管理系统建模

图书馆管理系统是常见的管理信息系统,考虑到系统的推广性,本系统采用SQL SERVER2000作为数据库。并且采用PowerDesigner进行数据建模,从而自动生成sql脚本。 01、数据库概念设计 1. 数据库表设计 管理员表admin:管理员编号&am…

[JavaEE] volatile与wait和notify

专栏简介: JavaEE从入门到进阶 题目来源: leetcode,牛客,剑指offer. 创作目标: 记录学习JavaEE学习历程 希望在提升自己的同时,帮助他人,,与大家一起共同进步,互相成长. 学历代表过去,能力代表现在,学习能力代表未来! 目录 一.volatile 关键字. 1.volatile 能保证内存可见性…

12个爆款 Java 开源项目

1JavaGuidehttps://github.com/Snailclimb/JavaGuide Star 10503【Java学习面试指南】 一份涵盖大部分Java程序员所需要掌握的核心知识。2symphonyhttps://github.com/b3log/symphony Star 6664一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)平台…

17-Golang中的包

Golang中的包基本介绍包的三大作用相关说明包的注意事项和细节说明基本介绍 1.在实际的开发中,我们往往需要在不同的文件中,去调用其他文件的定义的幻术,比如main.go中,去使用utils.go文件中的函数2.包的本质就是创建不同的文件夹…

vue简单的数据传输

很久没有水文了,最近又得了新冠才好,学习也没什么进度,先复习下之前的组件的数据传输吧! props传值 这个很简单就是在组件标签上转递数据,值得注意的是如果不使用v-bind:(:),转递的…

任务二:Web隐藏信息获取

任务二:Web隐藏信息获取 任务环境说明: 服务器场景名:web20200604服务器场景用户名:未知通过本地PC中渗透测试平台Kali使用Nmap扫描目标靶机HTTP服务子目录,将扫描子目录命令所需参数及第四条扫描结果关键目录以&符号拼接,作为Flag提交(例:-p 22&/root/); …