6.1树的基本概念

6.1树的基本概念

一、 树的基本概念

(1)树的基本概念

树是 n(n≥0)个结点的有限集合 T。当 n=0 时,称为空树;当 n>0 时,该集合满足如下条件:

  • ①其中必有一个称为根(root)的特定结点,它没有直接前驱,但有零个或多个直接后
    继。
  • ②其余 n-1 个结点可以划分成 m(m≥0)个互不相交的有限集 T1,T2,T3,…,Tm,其中 Ti又是一棵树,称为根的子树。每棵子树的根结点有且仅有一个直接前驱,但有零个或多个直接后继。

下图给出了一棵树的逻辑结构图示,它如同一棵倒长的树。
在这里插入图片描述

(2)树的图解表示法

  • ①倒置树结构(树形表示法),如上图所示。
    例如家族关系的表示,A 有 3 个孩子 B、C、D,B 有两个孩子 E、F,D 有 3 个孩子 H、I、J 等。

  • ②文氏图表示法(嵌套集合表示法),如下图所示。
    例如某个国家 A,分成 3 个省 B、C、D,B 省包括 F、E 市,E 市包括 K、L 县等。
    在这里插入图片描述

  • ③广义表形式(嵌套扩号表示法),(A(B(E(K,L),F),C(G),D(H(M),I,J)))。
    例如一本书 A 分为 B、C、D 三章,B 章又分为 E、F 两节,E 节又分为 K、L 两段,等等。

  • ④凹入表示法,用位置的缩进表示其层次,实际上程序的锯齿形结构就是这种结构。
    例如,书的目录表的编排格式。
    在这里插入图片描述

二、 树相关的术语

  • 结点:包括一个数据元素及若
    干指向其他结点的分支信息。
  • 结点的度:一个结点的子树个
    数称为此结点的度。
  • 叶结点:度为 0 的结点,即无
  • 后继的结点,也称为终端结点。
  • 分支结点:度不为 0 的结点,也称为非终端结点。
  • 结点的层次:从根结点开始定义,根结点的层次为 1,根的直接后继的层次为 2,依此类推。
  • 结点的层序编号:将树中的结点按从上层到下层、同层从左到右的次序排成一个线性序列,依次给它们编以连续的自然数。
  • 树的度:树中所有结点的度的最大值。
  • 树的高度(深度):树中所有结点的层次的最大值。
  • 有序树:在树 T 中,如果各子树 Ti之间是有先后次序的,则称为有序树。
  • 森林:m(m≥0)棵互不相交的树的集合。将一棵非空树的根结点删去,树就变成一个森林;反之,给森林增加一个统一的根结点,森林就变成一棵树。
  • 同构:对两棵树,通过对结点适当地重命名,就可以使两棵树完全相等(结
    点对应相等,对应结点的相关关系也相等),则称这两棵树同构。
  • 我们常常借助人类家族树的术语,以便于直观理解结点间的层次关系。 孩子结点:一个结点的直接后继称为该结点的孩子结点。在图 6.1 中,B、
    C 是 A 的孩子。
  • 双亲结点:一个结点的直接前驱称为该结点的双亲结点。在图 6.1 中,A 是 B、C 的双亲。
  • 兄弟结点:同一双亲结点的孩子结点之间互称兄弟结点。在图 6.1 中,结点 H、I、J 互为兄弟。
  • 堂兄弟:父亲是兄弟关系或堂兄关系的结点称为堂兄弟结点。在图 6.1 中,结点 E、G、H 互为堂兄弟。
  • 祖先结点:一个结点的祖先结点是指从根结点到该结点的路径上的所有结点。在图 6.1 中,结点 K 的祖先是 A、B、E。
  • 子孙结点:一个结点的直接后继和间接后继称为该结点的子孙结点。在图 6.1 中,结点 D 的子孙是 H、I、J、M。
  • 前辈:层号比该结点小的结点,都称为该结点的前辈。在图 6.1 中,结点 A、B、C、D 都可称为结点 E 的前辈。
  • 后辈:层号比该结点大的结点,都称为该结点的后辈。在图 6.1 中,结点 K、L、M 都可称为结点 E 的后辈。

三、 树的 ADT 定义

树的抽象数据类型定义:
ADT Tree
{
数据对象 D:一个集合,该集合中的所有元素具有相同的特性。
结构关系 R:若 D 为空集,则为空树。若 D 中仅含有一个数据元素,则 R 为空集,否则 R={H},H 是如下的二元关系:

  • ①在 D 中存在惟一的称为根的数据元素 root,它在关系 H 下没有前驱。
  • ②除 root 以外,D 中每个结点在关系 H 下都有且仅有一个前驱。

基本操作:

  • ① InitTree(Tree): 将 Tree 初始化为一棵空树。

  • ② DestoryTree(Tree): 销毁树 Tree。

  • ③ CreateTree(Tree): 创建树 Tree。

  • ④ TreeEmpty(Tree): 若 Tree 为空,则返回 TRUE,否则返回 FALSE。⑤ Root(Tree): 返回树 Tree 的根。

  • ⑥ Parent(Tree,x): 树 Tree 存在,x 是 Tree 中的某个结点。若 x 为非根结点,则返回它的双亲,否则返回“空”。

  • ⑦ FirstChild(Tree,x): 树 Tree 存在,x 是 Tree 中的某个结点。若 x 为非叶子结点, 则返回它的第一个孩子结点,否则返回“空”。

  • ⑧ NextSibling(Tree,x): 树 Tree 存在,x 是 Tree 中的某个结点。若 x 不是其双亲的最后一个孩子结点,则返回 x 后面的下一个兄弟结点,否则返回“空”。

  • ⑨ InsertChild(Tree,p,Child): 树 Tree 存在,p 指向 Tree 中某个结点,非空树 Child与 Tree 不相交。将 Child 插入 Tree 中,做 p 所指向结点的子树。

  • ⑩ DeleteChild(Tree,p,i): 树 Tree 存在,p 指向 Tree 中某个结点,1≤i≤d,d 为 p 所指向结点的度。删除 Tree 中 p 所指向结点的第 i 棵子树。

  • TraverseTree(Tree,Visit()): 树 Tree 存在,Visit()是对结点进行访问的函
    数。按照某种次序对树 Tree 的每个结点调用 Visit()函数访问一次且最多一次。若 Visit()失败,则操作失败。
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值