斗鱼网站开发是用什么语言,石家庄网站建设服务,售后服务规范网站建设,中国品牌500强排名#x1f984;个人主页:修修修也 #x1f38f;所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 #x1f4cc;树的定义 树(Tree)是n(n≥0)个结点的有限集.n0时称为空树. 在任意一颗非空树中: 有且仅有一个特定的称为根(Root)的结点;当n1时,其余结点可分为m(m0)个互… 个人主页:修修修也 所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 树的定义 树(Tree)是n(n≥0)个结点的有限集.n0时称为空树. 在任意一颗非空树中: 有且仅有一个特定的称为根(Root)的结点;当n1时,其余结点可分为m(m0)个互不相交的有限集,其中每一个集合本身又是一颗树,并且称为根的子树(SubTree),如下图: 有关树的定义我们还需强调两点: n0时根节点是唯一的,不可能存在多个根节点.m0时,子树的个数没有限制,但它们一定是互不相交的.下图的两个结构就不符合树的定义,因为它们都有相交的子树: 树的相关概念 节点的度一个节点含有的子树的个数称为该节点的度 如上图A的为6.叶节点或终端节点度为0的节点称为叶节点 如上图B、C、H、I、K、L、...等节点为叶节点.非终端节点或分支节点度不为0的节点 如上图D、E、F、G、J等节点为分支节点.双亲节点或父节点若一个节点含有子节点则这个节点称为其子节点的父节点 如上图A是B的父节点.孩子节点或子节点一个节点含有的子树的根节点称为该节点的子节点 如上图B是A的孩子节点.兄弟节点具有相同父节点的节点互称为兄弟节点 如上图B、C是兄弟节点.树的度一棵树中最大的节点的度称为树的度 如上图树的度为6.节点的层次从根开始定义起根为第1层根的子节点为第2层以此类推树的高度或深度树中节点的最大层次 如上图树的高度为4.堂兄弟节点双亲在同一层的节点互为堂兄弟如上图H、I互为兄弟节点.节点的祖先从根到该节点所经分支上的所有节点如上图A是所有节点的祖先.子孙以某节点为根的子树中任一节点都称为该节点的子孙。如上图所有节点都是A的子孙.森林:由m(m0)棵互不相交的树的集合称为森林. 线性结构与树结构的对比 线性结构 第一个数据元素:无前驱最后一个数据元素:无后继中间元素:一个前驱一个后继 树结构 根节点:无双亲且唯一叶节点:无孩子,可以存在多个中间节点:一个双亲多个孩子 树的抽象数据类型
这里我们给出了一些树的基本常用操作:
ADT 树(tree)
Data树是由一个根结点和若干棵子树构成。树中结点具有相同数据类型及层次关系。
OperationInitTree(*T):构造空树T。DestroyTree(*T):销毁树T。CreateTree(*T,definition):按definition中给出树的定义来构造树。ClearTree(*T):若树T存在,则将树T清为空树。TreeEmpty(*T):若树T为空树,返回true,否则返回false。TreeDepth(*T):返回树T的深度。Root(T):返回T的根结点。Value(T,cur_e):cur_e是树T中一个结点,返回此结点的值。Assign(T,cur_e,value):给树T的结点cur_e赋值为value。Parent(T,cur_e):若cur_e是树T中的非根结点,则返回它的双亲,否则返回空。LeftChild(T,cur_e):若cur_e是树T的非叶结点,则返回它的最左孩子,否则返回空。RightSibling(T,cur_e):若cur_e有右兄弟,则返回它的右兄弟,否则返回空。InsertChild(*T,*p,i,c):其中p指向树T的某个结点,i为所指结点p的度加上1,非空树c与T不相交,操作结果为插入c为树T中p指结点的第i棵子树。DeleteChild(*T,*p,i): 其中p指向树T的某个结点, i为所指结点p的度,操作结果为删除T中p所指结点的第i棵子树。
endADT 树的存储结构
对于树的存储结构,我们这里介绍三种不同的表示法:双亲表示法、孩子表示法、孩子兄弟表示法。
双亲表示法
在链表中,我们设置的结点结构是由一个数据域和一个指针域构成的,如下图: 而到了树结构中,由于树中包含了诸多重要的要素,我们的结点构成就非常的灵活了,以双亲表示法为例,我们在每个结点中,附设一个指示器指示其双亲结点在数组的位置.也就是说,每个节点除了知道自己是谁外,还知道它的双亲在哪里.它的结点结构如下图所示: 孩子表示法 孩子表示法的思路是: 把每个结点放到一个顺序存储结构的数组里,再对每个结点的孩子建立一个单链表体现它们的关系. 具体办法是: 把每个结点的孩子结点排列起来,以单链表作存储结构,则n个结点有n个孩子链表,如果是叶子结点则此单链表为空.然后n个头指针又组成一个线性表,采用顺序存储结构,放进一个一维数组中,如下图所示: 孩子兄弟表示法 任意一棵树,它的结点的第一个孩子如果存在就是唯一的,它的右兄弟如果存在也是唯一的.因此,我们设置两个指针,分别指向该结点的第一个孩子和此节点的右兄弟. 结点示意图: 该方法实现的树如下图所示: 结语
希望这篇树的介绍能对大家有所帮助,欢迎大佬们留言或私信与我交流.
学海漫浩浩,我亦苦作舟!关注我,大家一起学习,一起进步! 相关文章推荐 【数据结构】什么是线性表? 【数据结构】线性表的链式存储结构 【数据结构】什么是栈? 【数据结构】用C语言实现顺序栈(附完整运行代码) 【数据结构】深入浅出理解链表中二级指针的应用 【数据结构】10道经典面试题目带你玩转链表