树和二叉树的定义和基本术语

文章目录

  • 前言
  • 一、树的定义
  • 二、树的基本术语
  • 三、二叉树的定义
  • 总结


前言

  T_T此专栏用于记录数据结构及算法的(痛苦)学习历程,便于日后复习(这种事情不要啊)。所用教材为《数据结构 C语言版 第2版》严蔚敏。


一、树的定义

  树(Tree),是 n (n>=0)个结点的有限集,它或为空树(n = 0); 或为非空树,对于非空树T:
  (1)有且仅有一个称之为根的结点;
  (2)除根结点以外的其余结点可分为 m (m>0) 个互不相交的有限集 T1, T2…其中每一个集合本身又是一棵树,并且称为根的子树(SubTree)。
  例如,在下图中,(a)是只有一个根结点的树;(b)是有13个结点的树,其中A是根结点,其余结点分成3个互不相交的子集: T1={B,E, F, K, L}, T2={C,G}, T3= {D, H, I, J, M}。Ti、T2和T3都是根A的子树,且本身也是一棵树。例如T1,其根结点为B, 其余结点分为两个互不相交的子集: T11= {E, K, L} , T12 = {F}。T11中 E 又是一个子树的根结点…
在这里插入图片描述
  因此可知,树的结构定义是一种递归定义(链表???(幻视)),且数据关系是一对多。

二、树的基本术语

(1) 结点:树中的一个独立单元。包含一个数据元素及若干指向其子树的分支,如上图(b) 中的 A 、 B 、 C 、 D 等。
(2)结点的度(degree):结点拥有的子树数量称为结点的度。例如,A的度为 3, C的度为 1, F的度为 0。
(3)树的度:树的度是树内各结点度的最大值。上图 (b) 所示的树的度3。
(4) 叶子: 度为 0 的结点称为叶子或终端结点。结点 K 、 L 、 F 、 G 、 M 、 I 、 J都是树的叶子。
由此,树的根结点无前驱有后继(n>1),叶子有前驱无后继。注意这里的根节点仅指最大一棵树的根节点,如上图中的A结点,而B结点显然不是最大树的根节点。
(5) 非终端结点:度不为 0 的结点称为非终端结点或分支结点。除根结点之外,非终端结点也称为内部结点,如上图中的E、B、C、D和H。
(6)双亲和孩子:结点的子树的根称为该结点的孩子,相应地,该结点称为孩子的双亲。例如,B的双亲为A, B的孩子有E和F。即结点前驱为双亲,后继为孩子。
(7) 兄弟:同一个双亲的孩子之间互称兄弟。例如,H 、 I 和J互为兄弟。
(8) 祖先:从根结点到该结点所经分支上的所有结点。例如, M 的祖先为 A 、 D 和H。
(9) 子孙:以某结点为根的子树中的任一结点都称为该结点的子孙。如 B 的子孙为E 、 K 、 L和F。
(10) 层次(level):结点的层次从根开始定义起,根为第一层,根的孩子为第二层。树中任一结点的层次等千其双亲结点的层次加1。
(11)堂兄弟:双亲在同一层的结点互为堂兄弟。例如,结点 G 与E 、 F、 H 、 I 、 J互为堂兄弟。
(12)树的深度(height):树中结点的最大层次称为树的深度或高度。上图所示的树的深度为4。
(13)有序树和无序树:如果将树中结点的各子树看成从左至右是有次序的(即不能互换),则称该树为有序树,否则称为无序树。在有序树中最左边的子树的根称为第一个孩子,最右边的称为最后一个孩子。
(14)森林:是 m (m>=0)棵互不相交的树的集合。对树中每个结点而言,其子树的集合即为森林。由此,也可以用森林和树相互递归的定义来描述树。

三、二叉树的定义

  任何树都可以转化为二叉树,而二叉树的许多操作算法简单,因此必须掌握二叉树。
  首先明确一点:二叉树不是树!!!二叉树不是树!!!二叉树不是树!!!(原因见下)
  二叉树(Binary Tree)是 n (n>=0)个结点所构成的集合,它或为空树(n = 0); 或为非空树,对于非空树T:
  (1) 有且仅有一个称之为根的结点T;
  (2)除根结点以外的其余结点分为两个互不相交的子集T1和T2, 分别称为T的左子树和右子树,且T1和T2本身又都是二叉树。
  二叉树与树一样具有递归性质,二叉树与树的区别主要有以下两点:
  (1)二叉树每个结点至多只有两棵子树(即二叉树中不存在度大于2 的结点);
  (2)二叉树的子树有左右之分,其次序不能任意颠倒。
 &emsp二叉树的递归定义表明二叉树或为空,或是由一个根结点加上两棵分别称为左子树和右子树的、互不相交的二叉树组成。由于这两棵子树也是二叉树,由二叉树的定义,它们也可以是空树。由此,二叉树可以有5种基本形态,如下图所示。
在这里插入图片描述
  由此可知,对于一个根节点带一个子树的结构,即c和d,在二叉树中仍然是两个不同的结构,但在树中却是相同的结构,从而,二叉树不是树(强碱不是碱,是盐!)。但上述对树的基本属于在二叉树中也适用。


总结

  路漫漫其修远兮,吾将上下而摆烂。(又是划水的一天,water,water,water,water,water…)
  有任何疑问和补充,欢迎交流。(但我显然不会T_T)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

React:Router-2. createBrowserRouter函数式

参考文档:ReactRouter官网 前边的文章 BrowserRouter组件式路由 提供了组件式路由的方式,在react-router6.4.0及以上版本,提供了 createBrowserRouter 函数式路由创建方式。 一、创建路由 1. 新建router.js文件,使用createBrow…

线程-进程-多线程 概述简介

01 线程简介 任务, 进程, 线程, 多线程 多任务 什么是多任务? 生活中的例子 第一个例子: 这张图片, 一个人边吃饭边玩手机, 同时做了两件任务,大家不要去当这样的低头族. 第二个例子: 第二张图, 开车的时候能打电话, 能打点滴 第三个例子: 第三个图, 说明了我们可以边…

HTML4(三):表单

文章目录 表单1. 基本结构2. 常用表单控件2.1 文本输入框2.2 密码输入框2.3 单选框2.4 复选框2.5 隐藏域2.6 提交按钮2.7 重置按钮2.8 普通按钮2.9 文本域2.10 下拉框2.11 示例 3. 禁用表单控件4. lable标签5. fieldset与legend标签6. 总结 表单 概念:一种包含交互…

vue3中如何更优雅的使用echarts?

echarts在vue或者react中使用存在的问题 每个图表需要从头到尾写地一遍完整的option配置,这样一来的话就会显得十分的冗余在同一个项目中,其实不难发现各类图表设计十分相似,甚至是相同,因此我们没必要一直做重复的工作&#xff…

基于Java+SpringBoot+Vue前后端分离教学资源共享平台系统

基于JavaSpringBootVue前后端分离教学资源共享平台系统 🍅 作者主页 网顺技术团队 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 文末获取源码联系方式 📝 🍅 查看下方微信号获取联系方式 承接各种定制系统…

标准参编征集|《第三方运维服务水平评价指南 工业废水处理设施》

目前,对于工业废水处理设施第三方运维服务的标准,国家和行业未曾出台有针对性的评价标准和规范,工业企业和工业园区对第三方运维服务的监督、考核、评价体系需要进一步补充和完善。 本标准的编制旨在帮助第三方运营单位从运营技术和管理举措…

Linux 第二十五章

🐶博主主页:ᰔᩚ. 一怀明月ꦿ ❤️‍🔥专栏系列:线性代数,C初学者入门训练,题解C,C的使用文章,「初学」C,linux 🔥座右铭:“不要等到什么都没有了…

定制聚四氟乙烯砂芯抽滤装置

聚四氟乙烯布氏漏斗及其抽滤装置,是实验室中使用的一种仪器,用来使用真空或负压力抽吸进行过滤。 布氏漏斗形状为扁圆筒状,圆筒底面上开了很多小孔。下连一个狭长的筒状出口。 使用的时候,一般先在圆筒底面垫上滤纸,…

使用PyTorch实现L1, L2和Elastic Net正则化

在机器学习中,L1正则化、L2正则化和Elastic Net正则化是用来避免过拟合的技术,它们通过在损失函数中添加一个惩罚项来实现。 正则化介绍 L1 正则化(Lasso回归): L1 正则化通过向损失函数添加参数的绝对值的和来实施惩…

JavaScript异步编程——07-Promise实例的方法【万字长文,感谢支持】

Promise 实例的方法简介 Promise 的 API 分为两种: Promise 实例的方法(也称为:Promis的实例方法) Promise 类的方法(也称为:Promise的静态方法) Promise 实例的方法:我们需要实…

Go 单元测试完全指南(一)- 基本测试流程

为什么写单元测试? 关于测试,有一张很经典的图,如下: 说明: 测试类型成本速度频率E2E 测试高慢低集成测试中中中单元测试低快高 也就是说,单元测试是最快、最便宜的测试方式。这不难理解,单元…

游戏工作室如何利用惯性动作捕捉技术制作动画?

随着动捕设备不断进步和游戏行业的发展,惯性动作捕捉技术在游戏开发领域逐渐普及。惯性动作捕捉技术,可以精准捕捉现实世界中的真人动作,并将其精准应用于虚拟角色上,使游戏中的角色动作可以呈现出更写实、逼真和沉浸感&#xff0…

【机器学习300问】80、指数加权平均数是什么?

严格讲指数加权平均数并不是机器学习中的专有知识,但他是诸多梯度下降优化算法的基础,所有我打算专门写一篇文章来介绍这种计算平均数的方法。还是老规矩,首先给大家来两个例子感受一下什么是指数加权平均数。 一、两个例子感性理解什么是指…

【Spring源码分析】ResolvableType

【Spring源码分析】ResolvableType 参考 目录 文章目录 【Spring源码分析】ResolvableType一、ParameterizedType 参数化类型&#xff0c;即泛型&#xff1b;例如&#xff1a;List< T>、Map< K,V>等带有参数化的对象;二、GenericArrayType—— 泛型数组 泛型数组…

竖排文字识别原理与实践操作方法

在当今数字化时代&#xff0c;OCR&#xff08;Optical Character Recognition&#xff0c;光学字符识别&#xff09;技术已经广泛应用于各个领域&#xff0c;特别是在文档处理方面&#xff0c;OCR软件能够帮助用户快速将纸质文档转化为可编辑的电子文档。然而&#xff0c;对于竖…

day-31 给植物浇水 II

思路 用两个变量start和end记录浇水位置&#xff0c;当前剩余水量大于需要浇水量时&#xff0c;进行浇水并前进一步&#xff0c;否则需要返回加水&#xff08;即重新灌满水罐的次数1&#xff09; 解题方法 用while&#xff08;start<end&#xff09;进行上述循环&#xff0…

【Spark】Spark编程体验,RDD转换算子、执行算子操作(六)

Spark编程体验 项目依赖管理 <dependencies><dependency><groupId>org.scala-lang</groupId><artifactId>scala-library</artifactId><version>2.12.10</version></dependency><dependency><groupId>org.ap…

数据库干货:推荐一款非常好用的 SQL Server管理工具

目录 2.1 SQL 编码辅助 2.2 表设计器 2.3 数据库设计器 2.4 模式比较 2.5 文档生成工具 2.6 数据导出和数据导入 2.7 源代码控制 2.8 监控工具 2.9 索引管理器 2.10 T-SQL 调试器 2.11 单元测试 一、软件简介 dbForge Studio 2019-2022 for SQL Server是针对SQL Serv…

Codeforces Round 943 (Div. 3)----B题题解

本题是很显然的双指针算法&#xff0c;一直移动&#xff0c;直达不匹配为止 #include <iostream> #include <vector> #include <string> #include <algorithm> using namespace std;const int N 200010; int t,n,m; char a[N],b[N];int main(void) {…