数据结构--树类型及树的基本概念

数据结构中的几种树

序号类型具体类型具体类型具体类型具体类型具体类型
1二叉树⑴二叉树⑵二叉查找树⑶笛卡尔树⑷T树⑸Top Tree
2自平衡二叉查找树⑴红黑树⑵平衡二叉树(AVL)⑶伸展树⑷树堆⑸节点大小平衡树
3B树⑴B树⑵B+树(AVL)⑶B*树⑷UB树⑸2-3树
⑹2-3-4树⑺(a,b)-树⑻Dancing tree⑼H树
4Trie前缀树后缀树基数树
5空间划分树⑴四叉树⑵八叉树⑶k-d树⑷vp树⑸R树
⑹R-树⑺X树⑻M树⑼线段树⑽希尔伯特R树
⑾优先R树
6非二叉树are neat
7其他类型are neat

树的概念

1. 树与子树
树(Tree)是n(n>=0)个结点的有限集。在任意一棵非空树中:
⑴有且仅有一个特定的称为根的结点
⑵当n>1时,其余结点可分为m(m>0)个互不相交有限集T1,T2,……,Tm ,其中每一个集合本身又是一棵树,并且称为根的**子树**
2.树的基本数据操作
  • ADT Tree{

    • 数据对象D:D是具有相同特性的数据元素的集合。
    • 数据关系R:若D为空集,则称为空树;
      • 若D仅含一个数据元素,则R为空集,否则R={H},H是如下二元关系:
        ⑴在D中存在唯一的称为根的数据元素rrot,他在关系H下无前驱
        ⑵若D-{root}!=空集合,则存在D-{root}的一个划分D1,D2,……,Dm(m>0),对任意 j!=k(1<=j,k<=m)有Dj∩Dk=空集,且对于任意的i(1<=i<=m)唯一存在数据元素Xi属于Di,有{root,Xi}属于H;
        ⑶对应于D-{root}的划分,H-{{root,xi},……,{root,xm}}有唯一的一个划分H1,H2,……,Hm(m>0),对任意j!=k(1<=j,k<=m)有Hj∩Hk=空集,且对于任意的i(1<=i<=m),Hi是Di上的二元关系,(Di,{Hi})是一棵符合本定义的树,称为根root的子树
    • 基本操作P:

      ⑴ InitTree(&T);
         操作结果:构造空树T。
      ⑵ DestroyTree(&T)
         初始条件:树T存在。
         操作结果:销毁树T。
      ⑶CreateTree(&T,definition):
          初始条件:definition给出树T的定义
          操作结果:按definition构造树T
      ⑷ClearTree(&T)
          初始条件:树T存在
          操作结果:将树T清为空树
      ⑸TreeEmpty(T)
          初始条件:树T存在
          操作结果:若T为空树,则返回TRUE,否则FALSE
      ⑹Root(T)
          初始条件:树T存在
          操作结果:返回T的根
      ⑺Value(T,cur_e)
          初始条件:树T存在,cur_e是T中某个结点。
          操作结果:返回cur_e的值
      ⑻Assign(T,cur_e, value)
          初始条件:树T存在
          操作结果:结点cur_e赋值为value
      ⑼Parent(T,cur_e)
          初始条件:树T存在,cur_e是T中某个结点。
          操作结果:若cur_e是T的非根节点,则返回它的双亲,否则函数值为“空”。
      ⑽LeftChild(T,cur_e)
          初始条件:树T存在,cur_e是T中某个结点。
          操作结果:若cur_e是T的非叶子结点,则返回它的最左孩子,否则返回“空”
      ⑾RightSibling(T,cur_e)
          初始条件:树T存在,cur_e是T中某个结点。
          操作结果:若cur_e有右兄弟,则返回它的右兄弟,否则函数值为“空”
      ⑿InsertChild(&T,&p,i,c)
          初始条件:树T存在,p指向T中某个结点,1<=i<=p所指结点的度+1,非空树c与T不想交。
          操作结果:插入c为T中p指结点的第i棵子树
      ⒀DeleteChild(&T,&p,i)
          初始条件:树T存在,p指向T中某个结点,1<=i<=p指结点的度
          操作结果:删除T中p所指结点的第i棵子树。
      ⒁TraverseTree(T,Visit())
          初始条件:树T存在,Visit是对结点操作的应用函数。
          操作结果:按某种次序对T的每个结点调用函数Visit()一次且至多一次。一旦Visit()失败,则操作失败
      
3.树的基本术语

结点的度:树中一个结点的子节点个数称为结点的度
树的度:树中结点的最大度数称为树的度
分支结点:度大于0的结点(又称为非终端结点)
叶子结点:度等于0(没有子女结点)的结点称为叶子结点。
结点的层次:从树根开始定义,根结点为第一层 (有的也把根结点当为第0层)
结点的深度:是从根节点开始自顶向下逐层累加的
节点的高度:从根节点开始自底向上逐层累加
树的高度(又叫深度):是树中结点的最大层数
路径和路径长度:树中两个结点之间的路径是由这两个结点之间所经过的结点序列构成的。路径长度是路径上所经过的边的个数。
有序树:如果将树中结点的各子树看成从左至右是有次序的(即不能互换),则称该树是有序数,否则称为无序树
森林:是m(>=0)棵互不相交的树的集合。森林的概念与树的概念十分相近,因为只要把树的跟删除就成了森林。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值