9-7-平衡二叉排序(搜索)树-查找-第9章-《数据结构》课本源码-严蔚敏吴伟民版
2016-06-21 11:06
393 查看
课本源码部分
第9章 查找 - 平衡二叉排序(搜索)树
——《数据结构》-严蔚敏.吴伟民版
源码使用说明 链接☛☛☛ 《数据结构-C语言版》(严蔚敏,吴伟民版)课本源码+习题集解析使用说明
课本源码合辑 链接☛☛☛ 《数据结构》课本源码合辑
习题集全解析 链接☛☛☛ 《数据结构题集》习题解析合辑
本源码引入的文件 链接☛ Base.c
文档中源码及测试数据存放目录:数据结构\▲课本算法实现\▲09 查找\07 BalancedBinarySortTree
[/b][/b][/b][/b]
[b][b][b] (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;[/b][/b][/b]
[b][b][b] (2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;[/b][/b][/b]
[b][b][b] (3)左、右子树也分别为平衡二叉排序树;[/b][/b][/b]
[b][b][b] (4)没有键值相等的结点。[/b][/b][/b]
[b][b][b] (5)左子树与右子树的高度之差的绝对值小于等于1;(区别于普通二叉排序树的地方)。[/b][/b][/b]
[b][b][b] 对于一般的二叉搜索树,其期望高度(即为一棵平衡树时)为log2n,其各操作的时间复杂度(O(log2n))同时也由此而决定。但是,在某些极端的情况下(如在插入的序列是有序的时),二叉搜索树将退化成近似链或链,此时,其操作的时间复杂度将退化成线性的,即O(n)。我们可以通过随机化建立二叉搜索树来尽量的避免这种情况,但是在进行了多次的操作之后,由于在删除时,我们总是选择将待删除节点的后继代替它本身,这样就会造成总是右边的节点数目减少,以至于树向左偏沉。这同时也会造成树的平衡性受到破坏,提高它的操作的时间复杂度。[/b][/b][/b]
[b][b][b] 平衡二叉搜索树(Balanced Binary Tree)具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。常用算法有红黑树、AVL、Treap、伸展树等。在平衡二叉搜索树中,我们可以看到,其高度一般都良好地维持在O(log(n)),大大降低了操作的时间复杂度。[/b][/b][/b]
更多章节持续更新中...
第9章 查找 - 平衡二叉排序(搜索)树
——《数据结构》-严蔚敏.吴伟民版
源码使用说明 链接☛☛☛ 《数据结构-C语言版》(严蔚敏,吴伟民版)课本源码+习题集解析使用说明
课本源码合辑 链接☛☛☛ 《数据结构》课本源码合辑
习题集全解析 链接☛☛☛ 《数据结构题集》习题解析合辑
本源码引入的文件 链接☛ Base.c
文档中源码及测试数据存放目录:数据结构\▲课本算法实现\▲09 查找\07 BalancedBinarySortTree
概述
平衡二叉排序(搜索)树常被称作平衡二叉树(Balanced Binary Tree),简称为AVL树(有别于AVL算法)。解析
[b][b][b]一棵平衡二叉排序[b][b][b][b](搜索)[/b][/b][/b]树或者是空树,或者是具有下列性质的二叉排序树:[/b][/b][/b][/b]
[b][b][b] (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;[/b][/b][/b]
[b][b][b] (2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;[/b][/b][/b]
[b][b][b] (3)左、右子树也分别为平衡二叉排序树;[/b][/b][/b]
[b][b][b] (4)没有键值相等的结点。[/b][/b][/b]
[b][b][b] (5)左子树与右子树的高度之差的绝对值小于等于1;(区别于普通二叉排序树的地方)。[/b][/b][/b]
[b][b][b] 对于一般的二叉搜索树,其期望高度(即为一棵平衡树时)为log2n,其各操作的时间复杂度(O(log2n))同时也由此而决定。但是,在某些极端的情况下(如在插入的序列是有序的时),二叉搜索树将退化成近似链或链,此时,其操作的时间复杂度将退化成线性的,即O(n)。我们可以通过随机化建立二叉搜索树来尽量的避免这种情况,但是在进行了多次的操作之后,由于在删除时,我们总是选择将待删除节点的后继代替它本身,这样就会造成总是右边的节点数目减少,以至于树向左偏沉。这同时也会造成树的平衡性受到破坏,提高它的操作的时间复杂度。[/b][/b][/b]
[b][b][b] 平衡二叉搜索树(Balanced Binary Tree)具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。常用算法有红黑树、AVL、Treap、伸展树等。在平衡二叉搜索树中,我们可以看到,其高度一般都良好地维持在O(log(n)),大大降低了操作的时间复杂度。[/b][/b][/b]
源码
文件一 ☛ BalancedBinarySortTree.h
文件二 ☛ BalancedBinarySortTree.c
文件三 ☛ BalancedBinarySortTree-main.c (测试文档)
文件四 ☛ TestData_Table.txt(查找表测试数据)
测试结果展示
更多章节持续更新中...
相关文章推荐
- 判断链表是否有环
- 9-6-二叉排序树-查找-第9章-《数据结构》课本源码-严蔚敏吴伟民版
- 《Java数据结构与算法》笔记-CH4-3用栈实现分隔符匹配
- 9-5-次优查找树-查找-第9章-《数据结构》课本源码-严蔚敏吴伟民版
- 9-4-插值查找-查找-第9章-《数据结构》课本源码-严蔚敏吴伟民版
- 二叉搜索树(待续)
- 《Java数据结构与算法》笔记-CH4-2用栈实现字符串反转
- 《Java数据结构与算法》笔记-CH4-1栈的实现
- 《Java数据结构与算法》笔记-CH3简单排序
- 《Java数据结构与算法》笔记-CH2有序数组
- 《Java数据结构与算法》笔记-CH2无序数组
- 《Java数据结构与算法》笔记-CH1
- 9-3-斐波那契查找-查找-第9章-《数据结构》课本源码-严蔚敏吴伟民版
- 9-2-折半查找/二分查找-查找-第9章-《数据结构》课本源码-严蔚敏吴伟民版
- 9-1-顺序查找-查找-第9章-《数据结构》课本源码-严蔚敏吴伟民版
- 9-0-查找表-查找-第9章-《数据结构》课本源码-严蔚敏吴伟民版
- 中缀表达式转换后缀表达式
- Java数据结构之哈夫曼树
- 为什么说程序=算法+数据结构!
- 第13周 数据结构(上海交大) 6-2 两个有序链表归并