第4章树与森林

到目前为止,数据结构与算法的逻辑结构中,线性结构分别于 第1章线性表第2章受限的线性表以及第3章线性表的推广中做了扼要介绍。从本章开始进入数据结构与算法的非线性结构部分,这里先巩固下逻辑结构的分类,如下图所示:

逻辑结构

一.树

1.1定义

树是N( N0 )个结点的有限结构。 N=0 时,称为空树。这是一种特殊情况。在任意一个非空树中应满足:

  • 有且仅有一个特定的称为根的结点;
  • 当( N>1 )时,其余结点可分为m( m>0 )个互不相交的有限结合{ T1,T2,...,Tm },其中每一个结合本身又是一棵树,并且称为根结点的子树。

显然树的定义是一种递归的数据结构,同时树也是一种分层的结构,具有以下两个特点:

  • 树的跟结点没有前驱结点,除根结点之外的所有节点有且仅有一个前驱结点;
  • 树中所有结点可以有零个或多个后继结点。

1.2基本术语

树的基本概念比较繁多,但无需特殊记忆,根据实例理解便可。

  • 结点的度:树中一个结点的子结点个数称为该结点的度;
  • 树的度:一棵树中,最大的结点的度称为树的度;
  • 分支结点或非终端结点:度不为0的结点;
  • 叶子结点或终端结点:度为0的结点称为叶子结点;
  • 双亲结点或父结点:若一个结点含有子结点,则这个结点称为其子结点的父结点;
  • 孩子结点或子结点:一个结点含有的子树的根结点称为该结点的子结点;
  • 兄弟结点:具有相同父结点的结点互称为兄弟结点;
  • 结点的祖先:从根到该结点所经分支上的所有结点;
  • 子孙结点:以某结点为根的子树中任一结点都称为该结点的子孙结点;
  • 结点的层次:从根开始定义起,根为第1层,根的子结点为第2层,以此类推;
  • 树的高度或深度:树中结点的最大层次;
  • 有序树:树中结点的子树自左向右是有次序的,不能交换,这样的树叫做有序树;
  • 无序树:树中结点的子树左右顺序并不相关联,即可以左右子树交换;
  • 路径:树中两个节点之间的路径是指由两个结点之间所经过的结点序列;
  • 路径长度:路径上所经过的边的个数;

为了清晰的说明树的基本术语和概念,参考下图:

BitTree

  1. 从结点A到结点H的唯一路径上的所有结点,称为H的祖先结点,如结点B,结点F;而结点H则为结点B的子孙结点;路径上最接近H的结点F称为H的双亲结点,而H为结点F的孩子结点;结点A是树中唯一没有双亲的结点,所以称为根结点。有相同双亲的结点称为兄弟结点,如结点H和结点I。
  2. 树中一个结点的子结点个数称为该结点的度,树中结点的最大度数称为树的度;如结点B的度为2,而树的度为3。
  3. 度大于0的结点称为分支节点,如结点B;度为0的结点称为叶子结点,如结点H和结点I;在分支结点中,每个结点的分支数就是该结点的度,如结点B的分支数为2,故结点B的度为2。
  4. 结点的层次是从树的根节点开始定义的,根结点为第1层(注:有些教材中定义为第0层),它的孩子结点为第2层,依次类推…比如结点A位于第1层。
  5. 结点的深度是从根结点开始自顶向下累加的,如图中H结点的深度是4。
  6. 结点的高度是从叶子结点开始自底向上累加的,如图中A结点的高度是4。
  7. 树的高度(又称深度)是树种结点的最大层数,如图中所示树的高度是4。
  8. 路径和路径长度:结点A和结点H的路径长度是3,中间经过结点B和结点F。

1.3性质

  • 树中的结点数等于所有结点的度数加1;
  • 度为m的树中,第i层上至多有 mi1 个结点 (i1)
  • 高度为h的m叉树至多有 (mh1)(m1) 个结点;
  • 具有n个结点的m叉树的最小高度为 logm(n(m1)+1)

二.森林

2.1定义

森林:由m( m0 )棵互不相交的树的集合称为森林。

森林与树的概念与树的概念十分相近,因为只要把树的根结点删去就成了森林。反之,只要给m棵独立的树加上一个结点,并把这m棵树作为该结点的子树,则森林就变成了树。

为了形象的说明森林与树之间的联系可以参考下图,其中左图是树,右图是森林:

BiTree

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
数据结构与C#语言和.NET框架结合是本书的一大特点。本书分为8章,第1章介绍了数据结构算法的基本概念及本书用到的数学和C#的知识;第2章至第6章分别讨论了线性表、栈和队列、串和数组、型结构和图结构等常用的数据结构及其应用,以及在.NET框架中相应的数据结构;第7、8两章分别讨论了排序和查找常用的各种方法及其应用以及在.NET框架中相应的算法。 第1章绪论...........................................................................................................................1 1.1 数据结构...................................................................................................................1 1.1.1 学习数据结构的必要性...................................................................................1 1.1.2 基本概念和术语...............................................................................................1 1.2 算法...........................................................................................................................4 1.2.1算法的特性............................................................................................................4 1.2.2算法的评价标准....................................................................................................5 1.2.3算法的时间复杂度................................................................................................6 1.3 数学预备知识...........................................................................................................7 1.3.1 集合...................................................................................................................7 1.3.2 常用的数学术语...............................................................................................8 1.3.3 对数...................................................................................................................8 1.3.4 递归...................................................................................................................9 1.4 C#预备知识.............................................................................................................10 1.4.1 接口.................................................................................................................10 1.4.2 泛型编程.....
第1章绪论...........................................................................................................................1 1.1 数据结构...................................................................................................................1 1.1.1 学习数据结构的必要性...................................................................................1 1.1.2 基本概念和术语...............................................................................................1 1.2 算法...........................................................................................................................4 1.2.1算法的特性............................................................................................................4 1.2.2算法的评价标准....................................................................................................5 1.2.3算法的时间复杂度................................................................................................6 1.3 数学预备知识...........................................................................................................7 1.3.1 集合...................................................................................................................7 1.3.2 常用的数学术语...............................................................................................8 1.3.3 对数...................................................................................................................8 1.3.4 递归...................................................................................................................9 1.4 C#预备知识.............................................................................................................10 1.4.1 接口.................................................................................................................10 1.4.2 泛型编程.........................................................................................................13 本章小结................................................................................................................................20 习题一....................................................................................................................................20 第2章线性表.....................................................................................................................22 2.1 线性表的逻辑结构.........................................................................................................22 2.1.1 线性表的定义.....................................................................................................22 2.1.2 线性表的基本操作.............................................................................................22 2.2 顺序表.............................................................................................................................24 2.2.1 顺序表的定义.....................................................................................................24 2.2.2 顺序表的基本操作实现.....................................................................................29 2.2.3 顺序表应用举例.................................................................................................35 2.3 单链表.............................................................................................................................38 2.3.1 单链表的定义.....................................................................................................39 2.3.2 单链表的基本操作实现.....................................................................................46 2.3.3 单链表应用举例.................................................................................................56 2.4 其他链表.........................................................................................................................61 2.4.1 双向链表.............................................................................................................61 2.4.2循环链表..............................................................................................................64 2.5 C#中的线性表.................................................................................................................64 本章小结................................................................................................................................67 习题二....................................................................................................................................67 第3章栈和队列.................................................................................................................69 3.1 栈....................................................................................................................................69 3.1.1 栈的定义及基本运算.........................................................................................69 3.1.2 栈的存储和运算实现.........................................................................................70 3.1.3 栈的应用举例.....................................................................................................82 3.1.4 C#中的栈.............................................................................................................87 3.2 队列................................................................................................................................87 3.2.1队列的定义及基本运算......................................................................................87 数据结构(C#语言版) 目录 II 3.2.2 队列的存储和运算实现.....................................................................................89 3.2.3 队列的应用举例...............................................................................................103 3.2.4 C# 中的队列.....................................................................................................104 本章小结...............................................................................................................................105 习题三..................................................................................................................................105 第4章串和数组...............................................................................................................106 4.1 串..................................................................................................................................106 4.1.1 串的基本概念...................................................................................................106 4.1.2 串的存储及类定义...........................................................................................106 4.1.3 串的基本操作的实现.......................................................................................111 4.1.4 C#中的串...........................................................................................................115 4.2 数组...............................................................................................................................117 4.2.1 数组的逻辑结构...............................................................................................117 4.2.2 数组的内存映象...............................................................................................118 4.2.3 C#中的数组.......................................................................................................119 本章小结...............................................................................................................................121 习题四..................................................................................................................................121 第5章树和二叉...........................................................................................................123 5.1 ..................................................................................................................................123 5.1.1 的定义...........................................................................................................123 5.1.2 的相关术语...................................................................................................124 5.1.3 的逻辑表示...................................................................................................125 5.1.4 的基本操作...................................................................................................126 5.2 二叉...........................................................................................................................126 5.2.1 二叉的定义...................................................................................................127 5.2.2 二叉的性质...................................................................................................128 5.2.3 二叉的存储结构...........................................................................................129 5.2.4二叉链表存储结构的类实现............................................................................132 5.2.5 二叉的遍历...................................................................................................137 5.3 森林.......................................................................................................................141 5.3.2 森林与二叉的转换...............................................................................144 5.3.3 森林的遍历...............................................................................................147 5.4哈夫曼........................................................................................................................147 5.4.1哈夫曼的基本概念........................................................................................147 5.4.2哈夫曼类的实现............................................................................................149 5.4.3哈夫曼编码........................................................................................................153 5.5 应用举例...............................................................................................................154 5.6 C#中的...............................................................................................................157 本章小结...............................................................................................................................158 习题五..................................................................................................................................159 第6章图...........................................................................................................................161 6.1 图的基本概念................................................................................................................161 6.1.1 图的定义.............................................................................................................161 6.1.2 图的基本术语...................................................................................................161 数据
第1章绪论...1 1.1 数据构...................1 1.1.1 学习数据结构的必要性...1 1.1.2 基本概念和术语...............1 1.2 算法...4 1.2.1算法的特性............................4 1.2.2算法的评价标准....................5 1.2.3算法的时间复杂度................6 1.3 数学预备知识...........................7 1.3.1 集合...................................7 1.3.2 常用的数学术语...............8 1.3.3 对数...................................8 1.3.4 递归...................................9 1.4 C#预备知识.............................10 1.4.1 接口.................................10 1.4.2 泛型编程.........................13 本章小结........20 习题一............20 第2章线性表.....................................22 2.1 线性表的逻辑结构.........................22 2.1.1 线性表的定义.....................22 2.1.2 线性表的基本操作.............22 2.2 顺序表.....24 2.2.1 顺序表的定义.....................24 2.2.2 顺序表的基本操作实现.....29 2.2.3 顺序表应用举例.................35 2.3 单链表.....38 2.3.1 单链表的定义.....................39 2.3.2 单链表的基本操作实现.....46 2.3.3 单链表应用举例.................56 2.4 其他链表.61 2.4.1 双向链表.............................61 2.4.2循环链表..............................64 2.5 C#中的线性表.................................64 本章小结........67 习题二............67 第3章栈和队列.................................69 3.1 栈............69 3.1.1 栈的定义及基本运算.........69 3.1.2 栈的存储和运算实现.........70 3.1.3 栈的应用举例.....................82 3.1.4 C#中的栈.............................87 3.2 队列........87 3.2.1队列的定义及基本运算......87 数据结构(C#语言版) 目录 II 3.2.2 队列的存储和运算实现.....89 3.2.3 队列的应用举例...............103 3.2.4 C# 中的队列.....................104 本章小结.......105 习题三..........105 第4章串和数组...............................106 4.1 串..........106 4.1.1 串的基本概念...................106 4.1.2 串的存储及类定义...........106 4.1.3 串的基本操作的实现.......111 4.1.4 C#中的串...........................115 4.2 数组.......117 4.2.1 数组的逻辑结构...............117 4.2.2 数组的内存映象...............118 4.2.3 C#中的数组.......................119 本章小结.......121 习题四..........121 第5章树和二叉...........................123 5.1 ..........123 5.1.1 的定义...........................123 5.1.2 的相关术语...................124 5.1.3 的逻辑表示...................125 5.1.4 的基本操作...................126 5.2 二叉...126 5.2.1 二叉的定义...................127 5.2.2 二叉的性质...................128 5.2.3 二叉的存储结构...........129 5.2.4二叉链表存储结构的类实现....................................132 5.2.5 二叉的遍历...................137 5.3 森林.......................................141 5.3.2 森林与二叉的转换.......................................144 5.3.3 森林的遍历...............147 5.4哈夫曼147 5.4.1哈夫曼的基本概念........147 5.4.2哈夫曼类的实现............149 5.4.3哈夫曼编码........................153 5.5 应用举例...............................154 5.6 C#中的...............................157 本章小结.......158 习题五..........159 第6章图...161 6.1 图的基本概念................................161 6.1.1 图的定义.............................161 6.1.2 图的基本术语...................161 数据结构(C#语言版) 目录 III 6.1.3 图的基本操作...................165 6.2 图的存储结构...............................166 6.2.1邻接矩阵............................167 6.2.2 邻接表...............................172 6.3 图的遍历.......................................185 6.3.1 深度优先遍历...................185 6.3.2 广度优先遍历...................188 6.4 图的应用.......................................189 6.4.1 最小生成.......................189 6.4.2 最短路径...........................199 6.4.3 拓扑排序...........................207 本章小结.......210 习题六..........210 第7章排序.......................................213 7.1 基本概念.......................................213 7.2 简单排序方法...............................214 7.2.1 直接插入排序...................214 7.2.2 冒泡排序...........................216 7.2.3 简单选择排序...................217 7.3 快速排序.......................................219 7.4 堆排序...222 7.5 归并排序.......................................230 7.6 基数排序.......................................232 7.6.1 多关键码排序...................232 7.6.2 链式基数排序...................233 7.7 各种排序方法的比较与讨论.......235 7.8 C#中排序方法...............................235 本章小结.......236 习题七..........236 第8章查找.......................................238 8.1 基本概念和术语............................238 8.2 静态查找表...................................238 8.2.1 顺序查找...........................238 8.2.2 有序表的折半查找...........239 8.2.3 索引查找...........................242 8.3 动态查找表...................................243 8.4 哈希表...252 8.4.1 哈希表的基本概念...........252 8.4.2 常用的哈希函数构造方法.......................................253 8.4.3 处理冲突的方法...............254 8.5 C#中的查找方法...........................256 本章小结.......256 习题八..........256 参考文献..............257

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值