- 1、本文档共32页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
树的有关定理和算法
目录
二叉树 2
二叉排序树 3
几种特殊的二叉排序树 4
1、平衡二叉树 4
2、红黑树 7
3、伸展树 10
划分树 12
树 13
字典树 13
后缀树 15
最小生成树算法 23
1、Prim算法 23
2、Kruskal算法 24
次小生成树 24
最小k度限制生成树 25
线段树的入门 26
树状数组 30
有关树的定理及算法的串讲
二叉树
二叉树:是有限个数据元素的集合,该集合或者为空,或者由一个称为根的元素及两个不相交的、被称为根的左子树和根的右子树的二叉树组成。当集合为空时,称该二叉树为空二叉树。在二叉树中,一个元素也称为一个节点。
完全二叉树若设二叉树的高度为h,除第 h 层外,其它各层 (1~h-1) 的节点数都达到最大个数,第 h 层有叶子节点,并且叶子节点都是从左到右依次排布,这就是完全二叉树。
二叉树的主要性质:
(1) 在二叉树中,第i层的节点总数不超过2^(i-1);
(2) 深度为h的二叉树最多有2^h-1个节点(h=1),最少有h个节点;
(3) 对于任意一棵二叉树,如果其叶节点数为N0,而度数为2的节点总数为N2则N0=N2+1;
(4) 具有n个节点的完全二叉树的深度为(log2n)+1 Typedef struct tree
{ int data;// 存放数据。
struct tree *lchild,*rchild;
}node;
顺序存储结构呢?
二叉树遍历 (1)前序遍历
访问根;按前序遍历左子树;按前序遍历右子树
(2)中序遍历
按中序遍历左子树;访问根;按中序遍历右子树
(3)后序遍历
按后序遍历左子树;按后序遍历右子树;访问根
先序遍历得到的结果序列为:ABDECF。
中序遍历得到的结果序列为:DBEAFC。
后序遍历得到的结果序列为:DEBFCA。
二叉排序树 1,二叉排序树(Binary Sort Tree)又称二叉查找树。 2,它或者是一棵空树;或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有节点的值均小于它的根节点的值; (2)若右子树不空,则右子树上所有节点的值均大于它的根节点的值; (3)左、右子树也分别为二叉排序树;
二叉排序树的操作有:查找、查找最大关键元素和最小关键元素、插入、删除。
二叉排序树的基本操作的时间与树的高度成正比。对于一棵含有n个节点的完全二叉树,这些操作的最坏运行时间为0(lgn)。
优点:查找某个元素的时间复杂度可以达到0(lgn)。
几种特殊的二叉排序树
1、平衡二叉树
平衡二叉树也是一种二叉排序树,又称AVL树。
? 一棵空树是平衡二叉树;若 T 是一棵非空二叉树,其左、右子树为 TL 和 TR ,令 hl 和 hr 分别为左、右子树的深度。当且仅当 TL 、 TR 都是平衡二叉树;? | hl - hr |≤ 1;时,则 T 是平衡二叉树。【例】如图 8.4 所示。?????????????????(a)平衡二叉树??????(b)非平衡二叉树??????????图8.3 平衡二叉树与非平二叉树相应地定义 hl - hr 为二叉平衡树的平衡因子 (balance factor) 。因此,平衡二叉树上所有节点的平衡因子可能是 -1 , 0 , 1 。换言之,若一棵二叉树上任一节点的平衡因子的绝对值都不大于 1 ,则该树是就平衡二叉树。平衡二叉树在进行插入操作的时候可能出现不平衡的情况,AVL树即是一种自平衡的二叉树,它通过旋转不平衡的节点来使二叉树重新保持平衡,并且查找、插入和删除操作在平均和最坏情况下时间复杂度都是O(log n)?? AVL树的旋转一共有四种情形,注意所有旋转情况都是围绕着使得二叉树不平衡的第一个节点展开的。1. LL型
?? ?平衡二叉树某一节点的左孩子的左子树上插入一个新的节点,使得该节点不再平衡。这时只需要把树向右旋转一次即可,如图所示,原A的左孩子B变为父节点,A变为其右孩子,而原B的右子树变为A的左子树,注意旋转之后Brh是A的左子树
?
?
2. RR型
?? 平衡二叉树某一节点的右孩子的右子树上插入一个新的节点,使得该节点不再平衡。这时只需要把树向左旋转一次即可,如图所示,原A右孩子B变为父节点,A变为其左孩子,而原B的左子树Blh将变为A的右子树。
?
?
3. LR型
?? 平衡二叉树某一节点的左孩子的右子树上插入一个新的节点,使得该节点不再平衡。这时需要旋转两次,仅一次的旋转是不能够使二叉树再次平衡。如图所示,在B节点按照RR型向左旋转一次之后,二叉树在A节点仍然不能保持平衡,这时还需要再向右旋转一次。
?
4. RL型
?? 平衡二叉树某一节点的右孩子的左子树上插入一个新的节点,使得该节点不再平
文档评论(0)