数据结构 树的基本介绍

树的定义及特点

  1. 树的定义:
    树是由n(n>=0)个结点组成的有限集合(记为T)。如果n=0,它是一棵空树,这是树的特例;如果n>0,n个结点中存在(有且仅有)一个结点作为树的根节点(root),其余节点可分为m(m>=0)个互不相交的有限集T1、T2、…、Tm,其中,每个子集本身又是一颗符合定义的树,称为根节点的子树。
  2. 树的特点:
    树是一种非线性数据结构,具有以下特点:它的每一个结点可以有零个或多个后继结点,但是有且只有一个前驱结点(根节点除外);这些数据结点按分支关系组织起来,清晰地反映了数据元素之间的层次关系。可以看出,数据元素之间存在的关系是一对多的关系

树的逻辑结构表示方法

  1. 树形表示法:
    用一个圆圈表示一个结点,圆圈内的符号代表该结点的数据信息,结点之间的关系通过连线表示。方向是从上向下,即连线的上方结点是下方结点的前趋结点,下方结点是上方结点的后继结点。
    树形表示法

  2. 文氏图表示法:
    每棵树对应一个圆圈,圆圈内包含根结点和子树的圆圈,同一个根结点下的各子树对应的圆圈是不能相交的。在用这种方法表示的树中,结点之间的关系是通过圆圈的包含来表示的。
    文氏图表示法

  3. 凹入表示法:
    每棵树对应着一个条形,子树的根对应着一个较短的条形,且树根在上,子树的根在下,同一个根下的各子树的根对应的条形长度是一样的。
    凹入表示法

  4. 括号表示法:
    每棵树对应一个由根作为名字的表,表名放在表的左边,表是由在一个括号里的各子树对应的表组成的,各子树对应的表之间用逗号分开。在用这种方法表示的树中,结点之间的关系是通过括号的嵌套表示的。
    A(B(E,F),C(G(J)),D(H,I(K,L,M)))

树的基本术语

  1. 结点的度与树的度:
    树中每个结点的子树的个数称为该结点的度。树中各结点的度的最大值称为树的度,通常将度为m的树称为m次树。上面所示的是一棵3次树。
  2. 分支节点与叶子结点:
    度不为0的结点称为非终端结点,又称分支结点。度为0的结点称为终端结点或叶子结点。在分支结点中,每个结点的分支数就是该结点的度。
  3. 路径和路径长度:
    对于任意两个结点ki和kj,若树中存在一个结点序列ki、ki1、ki2、…、kj,使得序列中除了ki以外的任一结点都是其在序列中的前一个结点的后继结点,则称该结点序列为由ki到kj的一条路径,用结点所通过的结点序列(ki、ki1、ki2、…、kj)表示这条路径。
    路径长度等于路径所通过的结点个数减1(即路径上分支数目)
  4. 结点的层次和树高度:
    树中的每个结点都处在一定的层次上。结点的层次从树根开始定义,根结点为一层,它的孩子结点为第二层,以此类推,一个节点所在的层次为其双亲结点所在的层次加1.树中结点的最大层次称为树的高度(或树的深度)。
  5. 有序树和无序树:
    若树中各结点的子树是按照一定的次序从左到右排列的,且相对次序不能随意变换,称之为有序树,否则称之为无序树。
  6. 森林:
    n(n>0)个互不相交的树的集合称为森林。

树的性质

  1. 树中的结点树等于所有结点的分支数加1
  2. 度为m的树中第i层上最多有mi-1个结点(i>=1)
    推广:当一棵m次树的第i层上有mi-1个结点(i>=1)时,称该层是满的。若一棵m次树的所有叶子结点在同一层,且每一层都是满的,称之为满m次树。对于n个结点,构造m次树为满m次树或者接近满m次树,此时树的高度最小。
  3. 高度为h的m次树的结点最多有 m h − 1 m − 1 \frac{m^h-1}{m-1} m1mh1
  4. 具有n个结点的m次树的最小高度为
    logm(n(m-1))+1

树的基本运算

  1. 先根遍历
    ①访问根结点
    ②按照从左到右的次序先根遍历根结点的每一棵子树
    ABEFCGJDHIKLM
  2. 后根遍历
    ①按照从左到右的次序后根遍历根结点的每一棵子树
    ②访问根结点
    EFBJGCHKLMIDA
  3. 层次遍历
    从根结点开始,按从上到下、从左到右的次序访问树中的每一个结点
    ABCDEFGHIJKLM
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值