【数据结构】5.1 树和二叉树的定义

news2024/11/27 12:47:21

前言

数形结构的关系是 1 对 n 的,树的每个元素后面都可以有多个后继,但是只能有 1 个前趋。

在这里插入图片描述

树形结构(非线性结构)

  • 结点之间有分支
  • 具有层次关系

在这里插入图片描述

5.1.1 数的定义

(Tree)是 n (n >= 0)个结点的有限集,若 n = 0(没有元素的数),则称为空树,若 n > 0,则它满足两个条件。

  1. 有且仅有一个特定的称之为的结点,若 n = 1,则说明这棵树只有树根。
  2. 出根结点意外的其余结点可分为 m (m > 0),个不互相交的有限集 T1,T2,T3,…,Tm,奇珍每一个集合本身又是一棵树,并成为根的子数(SubTree)。

如:

这是个只有根结点的树

在这里插入图片描述

一般的树

在这里插入图片描述

A 这个元素称之为根,其余的元素,分成若干个不想交的子集,称之为根的若干个子树。

在这里插入图片描述

,每一个子树的第一个元素称之为根,其余的元素分成若干个子树

在这里插入图片描述

树的其他表示方式

在这里插入图片描述

5.1.2 树的基本术语

在这里插入图片描述

  1. 结点:树中的每一个独立单元。数据元素以及指向子树的分支,如上图中的 A B C D 等,都是一个结点,只有根结点没有前趋
  2. 结点的度:结点拥有的子树数(分支数或后继数)被称为结点的度,如:A 拥有三个子树,则A的度为3,B 的度为2,C为1,D为3,F为0。
  3. 树的度:树内各结点的度的最大值,如上图的树的度为3,拥有分支最多的结点是A和D,都有3个结点,所以整个数的度为3。
  4. 叶子结点:将没有子树(分支或后继)的结点称为叶子结点(终端结点)
  5. 非终端结点:度 ≠ 0 (有分支或后继)的结点,称为非终端结点或分支结点,除根结点之外,非终端结点也称为内部结点。
  6. 双亲和孩子:结点的子树的根称为该结点的孩子,相应的,该结点称为孩子的双亲。如:A 的孩子是 BCD,B 的双亲是 A,B 的孩子有 E 和 F。
  7. 兄弟:同一个双亲的孩子之间互称为兄弟,如:BCD 是兄弟,HIJ 也是兄弟,KL 也是兄弟。
  8. 堂兄弟:双亲位于同一层的结点互为堂兄弟,如:G 与 DFHIJ 互为堂兄弟,KLM 互为堂兄弟。
  9. 祖先:从根结点到该结点所经分支上的所有结点称为祖先,如:从A到M经过了ADH,所以称ADH为M的祖先。
  10. 子孙:以某结点为根的子树中的任一结点称为该结点的子孙。如:B 的子孙为EFKL, D 的子孙为 HIJM,M 既是H的孩子又是H的子孙,A就不用说了。
  11. 层次:结点的层次从根结点开始,根结点为第一层,根结点的孩子为第二层,树中任一结点的层次为其双亲结点的层次+1。
  12. 树的深度:树中结点的最大层次称为树的深度或高度,如:上图的树一共有4层,所以这棵树的深度(高度)为4。

在这里插入图片描述

  1. 有序树和无序树
    • 有序树:树中结点的各个子树从左至右有次序)(不能互换),在有序数中最左边的子树的根B称为第一个孩子,最右边的D称为最后一个孩子。
      如:T1 必须是左边的子树,T2必须是中间的,T3必须是最右边的,就称为有序树,T1 T2 T3的位置如果换一下就成另外一棵树了。
    • 无序树:树中结点的各个子树无次序,每个子树不管在什么位置都是这棵树。

在这里插入图片描述

  1. 森林 :是 m (M >= 0)棵互不相交的数的集合,对树中每个结点而言,其子树的集合即为森林。如:上图以 A 为根结点的树也算是一个森林,只不过这个森林只有一棵树。
    • 把根节点 A 删除树就变成了森林,这样就有三棵树了。
    • 一棵树可以看成是一个特殊的森林
    • 给森林中的各子树加上一个双亲结点,森林就变成了树。
    • 树一定是森林,只不过这个森林只有一棵树,但是森林不一定是树

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

树结构和线性结构的比较

在这里插入图片描述

5.1.3 二叉树的定义

每个结点最多只有两个分支的树称为二叉树

  • 二叉树的结构最简单,规律性最强。
  • 所有数都能转为唯一对应的二叉树,不失一般性。

普通树(二叉树)若不转化为二叉树,则运算很难实现。

二叉树在树结构的应用中起着非常重要的作用,因为对二叉树的许多操作算法简单,而任何树都可以与二叉树相互转换,这样就解决了树的存储结构及其运算中存在的复杂性。

二叉树是 n(n >= 0) 个结点的有限集,它或者是空集(n = 0),或者由一个根结点两棵互不相交的分别称作这个根的左子树右子树的二叉树组成。

特点

  1. 每个结点最多有两个孩子(二叉树中不存在度大于2的结点)。
  2. 子树有左右之分,其次序不能颠倒。
  3. 二叉树可以是空集合(空树),根可以有空的左子树或空的右子树。

二叉树不是树的特殊情况,他们是两个概念。

  • 二叉树就是二叉树
  • 二叉树结点的子树要区分左子树右子树,即使只有一棵子树,也要进行区分,说明它是左子树,还是右子树。
  • 当结点只有一个孩子是,就无需区分它是左还是右的次序。因此二者是不同的,这是二叉树与树的最主要的差别。
  • 也就是说二叉树每个结点位置或者说次序都是固定的,可以是空,但是不可以说它没有位置,而的结点位置是相对于别的结点来说,没有别的结点时,就无所谓左右了。

具有两个结点的 二叉树 有两种形态,要么右子树为空,要么左子树为空。

在这里插入图片描述

而有两个结点的 树 只有一种状态,不区分左右子树。

在这里插入图片描述

在这里插入图片描述

二叉树的基本形态

在这里插入图片描述
虽然二叉树概念不同,但是有关树的基本术语对二叉树同样适用(孩子兄弟双亲…)。

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

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

相关文章

java中javaSE与javaEE的区别

javaSE是什么? 怎么说吧,可以理解为javaSE是java的基石,如果将java程序想象成一座高楼大厦,那么javaSE就是地基。 官方的解释: Java SE(Java Platform,Standard Edition) Java SE 以…

实验室设计基本原则SICOLAB

实验室设计基本原则SICOLAB实验室设计、实验室建设施工SICOLAB实验室布局必须符合实验流程的规律,从样品接收、样品暂存、试剂和耗材储存、前处理和准备、样品分析测试、清洗到废物回收和处理,都必须有一个清晰的流程。要区分人流和物流,以及…

SQL DELETE 语句

DELETE 语句用于删除表中的记录。 SQL DELETE 语句 DELETE 语句用于删除表中的行。 SQL DELETE 语法 DELETE FROM table_name WHERE condition; 参数说明: table_name:要删除的表名称。condition:删除条件,用于指定哪些数据要…

小程序开发经验分享(4)-框架的选择

3个小程序开发框架 小程序开发公认的3个小程序开发框架: 原生、wepy、mpvue。3者个有利弊: 原生框架:微信的亲儿子,可直接在微信开发者工具中开发,方便调试,结构直接对应微信文档,框架无缝升级,最快支持最新版本的开发基础库。缺点是原生开发提供的开发方式比较朴素,…

2023年网络安全比赛--网络安全事件响应中职组(超详细)

一、竞赛时间 180分钟 共计3小时 二、竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 1.黑客通过网络攻入本地服务器,通过特殊手段在系统中建立了多个异常进程,找出启动异常进程的脚本,并将其绝对路径作为Flag值提交; 2.黑客通过网络攻入本地服务器,通过特殊手段在系统…

2022年12月国产数据库大事记-墨天轮

本文为墨天轮技术社区整理的2022年12月国产数据库大事件和重要产品发布消息。 目录 12月国产数据库大事记(时间线)产品/版本发布兼容认证排行榜新增数据库厂商活动相关资料 12月国产数据库大事记(时间线) 12月2日,…

linux环境tomcat发布系统

目录 1、上传需要发布的war 包 2、查看当前java线程 3、杀死需要启动的服务的java线程 3、修改上传的war包名称,删除原来的代码包 4、重新启动程序 5、查看启动日志 1、上传需要发布的war 包 通过XFTP上传war 包到 服务器 tomcat -->webapps 目录下。 注…

测试开发 | 相比 Selenium,Web 自动化测试框架 Playwright 有哪些强大的优势?

Playwright 是由微软的研发团队所开发的一款 Web 自动化测试框架,这个框架具有多平台、跨语言的特点。除了基本的自动化测试能力之外,同时它还具备非常强大的录制功能、追踪功能。以下是 Playwright 与 Selenium 的对比。 由此可见,Playwrigh…

Nginx编译安装vts监控模块

目录 1、环境准备 2、编译安装Nginx源码 2.1、安装依赖 2.2、编译安装Nginx 2.3验证Nginx安装 3、Nginx添加配置 3.11、Http模块下面添加 3.1.2、添加status访问页面 4、启动Nginx 4.3、访问前端页面 1、环境准备 参考Github vts模块参考Github nginx-1.20.2.tar.…

《Kotlin核心编程》笔记:val 和 var 字符串

Kotin重要特性:类型推导:定义变量不再需要显示声明类型,由编译器自动推导出变量的类型 如 val a "hello” val b 5 val c 10L表达式函数: fun sum(x: Int, y: Int) x y // 省略了{},Kotlin支持这种用单行表达式与等号…

Git——git分支操作

1 什么是分支 在版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个任务的单独 分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时 候,不会影响主线分支的运行。对于初…

ArcGIS基础实验操作100例--实验52导出点要素的坐标值

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台:ArcGIS 10.6 实验数据:请访问实验1(传送门) 高级编辑篇--实验52 导出点要素的坐标值 目录 一、实验背景 二、实验数据 三、实验步骤 (…

flutter:如何实现局部导航管理?

引言 今天,小编给大家分享如何在 flutter 中实现 ‘局部导航’。开始之前我们先来统一一下关于 局部导航 的概念。 局部导航是什么? 我们在 flutter 中使用 navigator 来管理 app 的页面堆栈,主要包括 push、pop 这两种操作。而当我们UI设…

gitee实现项目托管

一、下载git官网链接:Git - Downloads安装参考:https://blog.csdn.net/weixin_44950987/article/details/102619708二、登录gitee(码云),添加SSH公钥2.1、生成SSH公钥过程2.2、打开刚刚下载的git 然后跟着步骤来:2.3、…

C程序设计教程(02)—— 概述部分练习题

C程序设计教程(02)—— 概述部分练习题 一、填空题 1、结构化程序设计采用顺序结构、(分支结构或选择结构)和循环结构等三种基本结构编写程序。 2、程序由(一个或多个函数)组成,其中必须有且…

2.ISAAC 环境配置

ISAAC 环境配置 本文档介绍了如何开始使用 Isaac SDK 和 Isaac Sim 进行开发。 完成本文档中的步骤后,您应该准备好开始使用 Isaac SDK 开发机器人应用程序。 预安装 Isaac 目前仅支持 Ubuntu 18.04 LTS 从您的工作站进行开发和模拟。 请确保在您的工作站上安装最…

机器学习记录

概念辨析: 人工智能包含机器学习,机器学习包含深度学习 机器学习 机器学习约等于:looking for Function 深度学习:Function就是一个类神经网络 如果输出是一个数值就就叫回归 如果输出是几种类别就是分类 自监督学习为机器学习…

逻辑漏洞渗透与攻防(四)之任意账号注册

目录 任意账号注册 未验证邮箱/手机号 批量注册 个人信息伪造 前端验证审核绕过 邮箱/手机号注册激活验证绕过 用户名覆盖 任意账号注册 未验证邮箱/手机号 未验证邮箱/手机号,目前很多应用为了方便用户记录自己的用户名与密码,都可以使用邮箱…

【Spring6核心源码系列】IOC之BeanDefinition的封装

哎呀,又是午夜时分,又是一个失眠的夜晚,和去年一样,记得去年今日,也是睡不着觉,就注册了csdn的账号,开始写东西,csdn真是深夜最好的安魂剂。 Spring都发布了6.0,这不赶紧…

什么是JSP,JSP的运行原理是什么?

在动态Web项目的开发中,经常需要动态生成HTML。内容(如系统中的当前在线人数需要动态生成)。如果使用Servlet实现HTML页面数据的统计,则需要使用大量的输出语句。同时,如果静态内容和动态内容混合在一起,那么也将导致程序非常臃肿…