数据结构与算法分析:树
来源:互联网 发布:老电影修复软件 编辑:程序博客网 时间:2024/05/22 06:09
树
二叉树
二叉树是每个节点最多有两个子树的树结构。通常子树被称作"左子树"(left subtree)和"右子树"(right subtree)
二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。二叉树的第i层至多有2^{i-1}个结点;深度为k的二叉树至多有2^k-1个结点;对任何一棵二叉树T,如果其终端结点数为n_0,度为2的结点数为n_2,则n_0=n_2+1。
二叉查找树
平均查找:O(logn)
平均插入:O(logn)
平均删除(惰性删除):O(logn)
二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:
(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
(2)若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值;
(3)左、右子树也分别为二叉排序树;
AVL-平衡的二叉查找树
最坏查找:O(logn)
最坏插入:O(logn)
最坏惰性删除:O(logn)
平衡二叉查找树,又称 AVL树。它除了具备二叉查找树的基本特征之外,还具有一个非常重要的特点:它的左子树和右子树都是平衡二叉树,且左子树和右子树的深度之差的绝对值(平衡因子)不超过1。也就是说AVL树每个节点的平衡因子只可能是-1、0和1(左子树高度减去右子树高度)。
通过单旋转和双旋转操作可以将一个不平衡的二叉查找树转为平衡。
伸展树
所有最坏M次操作时间o(MlogN)
伸展树保证M次操作的序列的最坏摊还运行时间为0(Mlog(N)),伸展树通过展开操作(类似于旋转),将已经查询过的节点放到根节点上,将其相邻的节点也加高高度。
该树仅保证M次的的最坏操作为0(MlogN),但是不保证每一次的操作时间都为logN。
B树
平均操作时间:o(logmN),其中m为叉的数量
是一种多路搜索树(并不是二叉的):
1.定义任意非叶子结点最多只有M个儿子;且M>2;
2.根结点的儿子数为[2, M];
3.除根结点以外的非叶子结点的儿子数为[M/2, M];
4.每个结点存放至少M/2-1(取上整)和至多M-1个关键字;(至少2个关键字)
5.非叶子结点的关键字个数=指向儿子的指针个数-1;
6.非叶子结点的关键字:K[1], K[2],…, K[M-1];且K[i] < K[i+1];
7.非叶子结点的指针:P[1], P[2],…, P[M];其中P[1]指向关键字小于K[1]的子树,P[M]指向关键字大于K[M-1]的子树,其它P[i]指向关键字属于(K[i-1], K[i])的子树;
8.所有叶子结点位于同一层;
如:(M=3)
红黑树
所有操作最坏情况:O(logn)
而红黑树,能保证在最坏情况下,基本的动态几何操作的时间均为O(lgn)。
ok,我们知道,红黑树上每个结点内含五个域,color,key,left,right。如果相应的指针域没有,则设为NIL。
一般的,红黑树,满足以下性质,即只有满足以下全部性质的树,我们才称之为红黑树(近似平衡):
1)每个结点要么是红的,要么是黑的。
2)根结点是黑的。
3)每个叶结点,即空结点(NIL)是黑的。
4)如果一个结点是红的,那么它的俩个儿子都是黑的。
5)对每个结点,从该结点到其子孙结点的所有路径上包含相同数目的黑结点。
- 数据结构与算法分析 树
- 数据结构与算法分析:树
- 数据结构算法与分析
- 数据结构与算法分析
- 数据结构与算法分析
- 数据结构与算法分析
- 数据结构与算法分析
- 数据结构与算法分析
- 数据结构与算法分析
- 数据结构与算法分析
- 《数据结构与算法分析》
- (c#)数据结构与算法分析 --树
- python数据结构与算法 38 分析树
- 《数据结构与算法分析》--二叉查找树
- 数据结构与算法分析c++:算法分析
- 数据结构与算法分析c++:算法分析
- 数据结构与算法分析P241T4
- 数据结构与算法分析 感悟
- 【转】memcached卸载与安装
- Eclipse 编译错误 Access restriction:The type *** is not accessible due to restriction on... 解决方案
- LinkedBlockingQueue的api
- 【Thinkphp】引入第三方类库常见问题
- 解决"java.lang.UnsatisfiedLinkError: Native Library xxx.dll already loaded in another classloader"问题
- 数据结构与算法分析:树
- android fragment
- 四种生成和解析XML文档的方法详解(介绍+优缺点比较+示例)
- 在输入框输入完数据是,enter键便捷操作、 onkeydown()事件。
- OpenStack 高可用和灾备方案(下)
- LoaderManager使用详解(一)---没有Loader之前的世界
- mavenCenter和JCent
- inet_ntoa报错显示返回int
- SpringMVC学习(3)--基于注解的控制器