树的定义及其分类

树的定义



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

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

下图就是一棵普通的树:

相关术语


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

树的分类


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

树的存储



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

1、双亲表示法:

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

2、 孩子表示法:

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

3、 双亲孩子表示法:

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

4、二叉树存储:

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

森林的存储



森林是由多棵互不相交的树组成的集合,存储方式与树转换成二叉树存储方式类似。

  • 将森林中的每一棵对都转换成对应的二叉树。
  • 将第二棵二叉树作为每一棵二叉树根节点的右孩子,将第三棵二叉树作为第二棵二叉树根节点的右孩子,依次类推,最终得到的二叉树就是由森林转换成的二叉树。

关于本文



主要介绍了一下树的相关概念和术语以及树和森林的存储方法等相关知识,本人才疏学浅疏漏或者错误之处在所难免,欢迎大家批评指正。

时间: 2024-10-28 18:10:26

树的定义及其分类的相关文章

数据结构--树(定义与存储结构)

树基本定义 树的定义 数是具有n个节点的有限集.如图即是一个树形结构. 节点分类 节点的度:一个节点拥有的子节点即成为节点的度,比如A节点,有B和C两个子节点,那么A节点的度=2. 叶节点(终端节点):没有子节点的节点,比如G.H.I.... 如图: 节点间关系 孩子节点:某一个节点的子节点称为孩子节点.比如B.C节点是A节点的孩子节点. 双亲节点:与孩子节点相反.比如,A节点是B.C的双亲节点. 兄弟节点:同一个双亲节点的孩子节点,之间称为兄弟节点.比如,B.C为兄弟节点. 如图: 树的存储结

数据结构(十七)树的定义与存储结构

一.树的定义 1.树(Tree)是n(n>=0)个结点的有限集.n=0时称为空树.在任意一棵非空树中:(1)有且仅有一个特定的称为根(Root)的结点:(2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1.T2....Tm,其中每一个集合本身又是一棵树,并且称为根的子树(SubTree). 2.结点分类:树的结点包含一个数据元素及若干指向其子树的分支.结点拥有的子树数称为结点的度(Degree).度为0的结点称为叶结点(Leaf)或终端结点:度不为0的结点称为非终端结点或分

树的定义及术语

树的定义及术语 flyfish 2015-7-9 树是n(n>=0)个结点的有限集.n=0时称为空树.在任意一颗非空树中: 1)有且仅有一个特定的称为根(Root)的结点 2)当 n>1时,其余结点可分为m(m>0)个互不相交的有限集T1.T2.-.Tm,其中每一个集合本身又是一棵树,并且称为根的子树(SubTree) 树的结点包含一个数据元素以及若干指向其子树的分支. 结点拥有的子树数目称为结点的度. 度为0的结点称为叶结点或终端结点:度不为0的结点称为非终端结点或分支结点. 除根结点

电镀的定义、分类、工艺过程、设计要求等简要介绍

1.电镀的定义和分类1-1.电镀的定义随着工业化生产的不断细分,新工艺新材料的不断涌现,在实际产品中得到应用的设计效果也日新月异,电镀是我们在设计中经常要涉及到的一种工艺,而电镀效果是我们使用时间较长,工艺也较为成熟的一种效果,对于这种工艺的应用在我们的产品上已经非常多,我们希望通过总结我们已有的经验作一些设计的参考性文件,可以更好的将电镀效果应用在我们的设计上,也更合理的应用在我们的设计上,可以为以后的工作带来一些方便.通过这种工艺的处理我们通常可以得到一些金属色泽的效果,如高光,亚光等,搭配

树的定义和基本概念

数的定义 计算机世界的树是从自然界实际的树抽象而来的,指的是n个有父子关系的节点组成的有限集合. 树的递归定义: 树(Tree)是n(n≥0)个结点的有限集T,T为空时称为空树,否则它满足如下两个条件: 有且仅有一个特定的称为根(Root)的结点: 其余的结点可分为m(m≥0)个互不相交的子集Tl,T2,-,Tm,其中每个子集本身又是一棵树,并称其为根的子树(Subree). 注意: 树的递归定义刻画了树的固有特性:一棵非空树是由若干棵子树构成的,而子树又可由若干棵更小的子树构成. 常用术语 节

从AVL树的定义出发,一步步推导出旋转的方案。

本文从AVL树的定义出发,一步步地推导出AVL树旋转的方案,这个推导是在已经清楚地知道AVL树的定义这个前提下进行的.文章注重思考的过程,并不会直接给出AVL树是怎样旋转的,用来提醒自己以后在学习的时候要注重推导的过程.在此,我要特别感谢下我的数据结构老师,是他让我意识到思考的重要性. 一.从AVL树的定义开始 1. 二叉查找树的问题 二叉查找树的出现,虽然使查找的平均时间降到了logN,但是,在多次删除或者插入操作后,可能会出现根节点的左子树比右子树高很多,或者右子树比左子树高很多的情况.如图

第五十一课 树的定义与操作

树的定义是递归的,与树的相关算法也是递归的. 如果我们定义一个数组,这个数组中的每一个元素是一棵树,那么这个数组就构成了一个森林. 树节点里面有指向父节点的指针,对于工程实践来说非常有帮助. 添加TreeNode.h文件: 1 #ifndef TREENODE_H 2 #define TREENODE_H 3 4 #include "Object.h" 5 6 namespace DTLib 7 { 8 9 template < typename T > 10 class

设计模式的定义和分类

1.设计模式的定义和分类 设计迷失的出现可以让开发人员站在前人的肩膀上,通过一些成熟的设计方案来指导新项目的设计和开发没以便于开发出具有更好的灵活性和可拓展性.也更易于复用的软件系统, 设计模式是一套被反复使用的.多数人知晓的.经过分类编目的.代码设计经验的总结,使用设计模式是为了可重用代码,让代码更容易被他人理解并且提高代码的可靠性.设计模式是一种用于对系统中不断重现的设计问题的解决方案进行文本化的技术,也是一种共享专家设计经验的技术. GoF对设计模式的定义如下: 设计模式 是指在特定环境下

树的定义与存储

树的定义 树(tree):n(n>=0)个节点的有限集T. n=0 则称为空树. 当n>0时,有且仅有一个特定的节点,称为树的根(root). 当n>1时,其余节点可分为m(m>=0)个互不相交的有限集T1,T2,..Tm,其中每一个和本身又是一棵树,称为跟的子树(subtree). ① ╱ │ ╲ ② ④ ③ 树与非树识别 除了根节点外,每个节点有且仅有一个父节点. 一个N个节点的树,共有N-1条边. 树的基本术语 结点(node)--表示树中的元素,包含数据元素及若干指向其子树