树的定义及表示

在前面的一些文章中,我们介绍了一些线性数据结构,然而在实际应用中,仅有线性数据结构是不够的,如公司员工上下级关系,家族图谱,省市关系这些具有层级关系的很难用线性数据结构来表示,所以还要引入非线性数据结构,今天就带大家介绍一种非线性数据结构—树。

1.树的相关定义

树是由n(n ≥ 0)个结点组成的一个具有层次关系的集合,如图1所示:
在这里插入图片描述

如果n=0,该树为一棵空树
如果n>0,该树为一棵非空树,图1就是一棵非空树
下面介绍一些树中的术语:

结点:树中的每个元素成为结点
根结点:在任意一棵树中,有且仅有一个根节点,根节点只有后继结点而没有前驱结点,图1中A结点即为根节点
子树:除根节点外,树中其余结点可以分为多个互不相交的有限集,每一个有限集又是符合定义的树,称为根结点的子树,如图1中集合D、I、J、L、M组成的树为A的子树
子结点:每个结点的直接后继结点称为该节点的子节点,如B结点为A结点的子节点
父节点:每个结点的直接前驱结点称为该节点的父节点,如结点A为结点B的父节点
兄弟结点:具有同一父节点的结点互为兄弟结点
结点的度:一个结点拥有的子树的树木称为结点的度,如图1中根节点A的度为3,因为它有以B、C、D三个结点为根节点的子树,B结点的度为3,D结点的度为2
树的度:树中各结点度的最大值称为树的度,通常将度为m的树称为m次树,显然图1中树的度为3,为3次树
分支结点:度不为0的结点称为分支结点
叶子结点:度为0的结点称为叶子结点,也就是没有后继结点的结点就是叶子结点
树的层次:树的层次从根开始定义,根为第一层,根的孩子为第二层,以此类推,结点所在层次为其父结点加1
树的高度(深度):树的最大层次
路径:从一个结点到另一个结点的路线,如结点序列ABFKN就是从A到N的一条路径(注意,从根节点到树中其余各结点只有一条唯一路径)
路径的长度:路径上所经过的边的数目
森林:m(m≥0)棵互不相交的树的集合,对于树来说,其子树的集合就是森林,如图1,删除根节点A后,其子树就组成了一片森林
有序树:如果一棵树的结点从左至右是有序的,不能互换,则称这棵树为有序树,否则称为无序树

对于上面的这些概念大家不要死记硬背,而应通过理解去记忆

2.树的表示法

树的表示方法通常有三种:图形表示法、广义表表示法、左孩子右兄弟表示法

2.1图形表示法

树的图形表示法就如图1所示,结点用圆圈表示,元素名称写在圆圈中,各结点之间的关系用连线表示

2.2广义表表示法

用广义表表示树形结构时,根节点写在最外边,第一层是其直接孩子结点,第二层是其孙子结点,逐层深入。
在这里插入图片描述
如图2表示中国省市关系的树,用广义表表示为:

(中国(四川(成都,绵阳),湖北(武汉,荆州),江西(南昌,九江,吉安 )))

同样,用广义表表示图1中的树为:

(A(B(E,F(K(N)),G),C(H),D(I,J(L,M))))

2.3左孩子右兄弟表示法

左孩子右兄弟表示法指的是:由左边的子结点接管父节点其余的子节点
还是以图1为例:
(1)对A的三个子节点,用左孩子右兄弟表示法表示为:
在这里插入图片描述
(2)对其余结点用左孩子右兄弟表示法,最终结果为:
在这里插入图片描述
值得注意的是,经过转换图1中的树成为了一棵二叉树(关于二叉树后续会进行讲解,这里读者只需知道二叉树在进行运算时要比多叉树效率高的多),实际上,左孩子右兄弟表示法可以将一棵多叉树转化为二叉树

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值