数据结构与算法-树

树的抽象数据类型定义

若|D|=0,则称为空树;
否则:
(1) 在D中存在唯一的称为根的数据元素root,
(2) 当n>1时,其余结点可分为m (m>0)个互不相交的有限集T1, T2, …, Tm,其中Ti本身是一棵符合本定义的树,称为根root的子树。
例如:A是根;其余结点分成三个互不相交的子集,T1={B,E,F,K,L}; T2={C,G};T3={D,H,I,J,M};T1,T2,T3都是根A的子树,且本身也是一棵树。

树的表示方法

数据结构与算法-树_第1张图片

  • 凹入表示法
    数据结构与算法-树_第2张图片

  • 嵌套集合表示法
    数据结构与算法-树_第3张图片

  • 广义表
    数据结构与算法-树_第4张图片

树的基本术语

  • 结点:数据元素+若干指向子树的分支
  • 结点的度:分支的个数
  • 树的度:树中所有结点的度的最大值
  • 叶子节点:度为零的结点
  • 分支(非终端)结点:度大于零的结点
  • (从根到结点的)路径:由从根到该结点所经分支和结点构成
  • 祖先结点、双亲结点、兄弟结点、堂兄弟节点、孩子结点、子孙结点:
  • 结点的层次:假设根结点的层次为0(或者为1),第 i 层结点的子树的根结点的层次为 i(或者为i-1)
  • 树的深度:树中叶子结点所在的最大层次
    数据结构与算法-树_第5张图片
  • 有向树:(1) 有确定的根;(2) 树根和子树根之间为有向关系
  • 有序树:子树之间存在确定的次序关系
  • 无序树:子树之间不存在确定的次序关系
  • 森林:是 m(m≥0)棵互不相交的树的集合
  • 任何一棵非空树是一个二元组 Tree = (root,F)其中:root 被称为根结点,F 被称为子树森林

数据结构与算法-树_第6张图片

树的结构特点

线性结构 树型结构
第一个数据元素无前驱 根结点(无前驱)
最后一个数据元素(无后继) 多个叶子结点(无后继)
其它数据元素(一个前驱、一个后继) 其它数据元素(一个前驱、多个后继)

树的存储结构

双亲标示法

用一组连续空间存储树的结点,同时在每个结点中附设一个指示器指示其双亲结点在链表中的位置。
数据结构与算法-树_第7张图片

孩子链表表示法

每个结点的孩子结点用单链表存储,再用含n个元素的结构数组指向每个孩子链表。
数据结构与算法-树_第8张图片

带双亲的孩子链表表示法

  1. 双亲表示法,PARENT(T,x)可以在常量时间内完成,但是求结点的孩子时需要遍历整个结构。
  2. 孩子链表表示法,适于那些涉及孩子的操作,却不适于PARENT(T,x)操作。
  3. 将双亲表示法和孩子链表表示法合在一起,可以发挥以上两种存储结构的优势,称为带双亲的孩子链表表示法
    数据结构与算法-树_第9张图片

孩子兄弟存储表示法

树的孩子兄弟存储表示法,又称为二叉树表示法,以二叉链表作为树的存储结构。
数据结构与算法-树_第10张图片

数据结构与算法-树_第11张图片

树的遍历

先序遍历(Pre-order)根-左-右

先根(次序)遍历:若树不空,则先访问根结点,然后依次先根遍历各棵子树。
数据结构与算法-树_第12张图片

中序遍历(In-order)左-根-右

在二叉树中,中序遍历首先遍历左子树,然后访问根结点,最后遍历右子树。
数据结构与算法-树_第13张图片

后序遍历(Post-order)左-右-根

后根(次序)遍历:若树不空,则先依次后根遍历各棵子树,然后访问根结点。
数据结构与算法-树_第14张图片

按层次遍历

按层次遍历:若树不空,则自上而下自左至右访问树中每个结点。
数据结构与算法-树_第15张图片

你可能感兴趣的:(数据结构与算法)