【算法】数据结构与算法分析学习笔记——各类二叉查找树的吐血整理

看完《数据结构与算法分析》,各种二叉查找树简直看得要崩溃,这里整理一下,也便于以后自己使用。


 查找(平均/最坏)插入(平均/最坏)删除(平均/最坏)优点缺点
二叉查找树BSTO(logN)/O(N)O(logN)/O(N)O(logN)/O(N)编程代码最简单树可能会不平衡,最坏情况会达到O(N)
AVL树O(logN)/O(logN)O(logN)/O(logN)O(logN)/O(logN)增加了平衡条件,保证了最坏情况依然是O(logN)编程复杂,数据结构相对复杂
伸展树SplayTreeO(logN)/O(N)O(logN)/O(N)O(logN)/O(N)数据结构相对简单,虽然有最坏情况,但并不影响总体速度仍然存在O(N)的情况
伸展树(自顶向下)O(logN)/O(N)O(logN)/O(N)O(logN)/O(N)相比自底向上,非递归实现,且只需要O(1)的额外空间但摊还时间不变代码复杂
红黑树RedBlackTreeO(logN)/O(logN)O(logN)/O(logN)O(logN)/O(logN)AVL的变种,继承了AVL的时间,平衡的好有大量的旋转,删除复杂,总体代码也复杂
AA-树O(logN)/O(logN)O(logN)/O(logN)O(logN)/O(logN)代码实现会大量简化,且时间继续保持旋转的次数会相对多
treap树O(logN)/O(N)O(logN)/O(N)O(logN)/O(N)这是最简单的一种树了,效率甚至高于伸展树依然是存在最坏情况的


二叉查找树BST:最原始的查找树,后面所有树都要叫它爸爸爷爷了,也不用多说啥。


AVL树:主要使用递归实现,非递归有点麻烦,通过记录每个节点的高度,当高度差达到2时,进行旋转,达到自平衡。实现可以参考:
http://blog.csdn.net/d521000121/article/details/54312142

伸展树SplayTree:思想是每次要找的都通过旋转放到根上(叫做展开),方便后续的查找,所以当某些数据连续被查找又或者要查找的数据非常接近,此时速度便会非常快。

                                   而且最坏情况不会保持。附上一个大神的博客:

   http://www.cnblogs.com/vamei/archive/2013/03/24/2976545.html


伸展树(自顶向下):从底向上需要递归,同时就是要额外空间,但自顶向下只需要常数空间即可,且可用非递归实现,所以个人认为这个算法会更快?

                                        注意这里生成的树与自底向上的会有区别。实现的话书上已经非常详细了。


红黑树RedBlackTree:AVL的变种,通过标记节点是红色还是黑色,再给树一系列的约束条件,达到自平衡的功能,从理论上也证明了生成的树已经接近最优。

  再附上大神博客:http://blog.csdn.net/chenhuajie123/article/details/11951777


AA-树:先有二叉B-树,再有BB-树,再加上一点红黑树的条件,就是AA-树(mdzz。。。)

       讲解这个比较好:http://blog.csdn.net/zhaojinjia/article/details/8121156,实现书上有


treap树:很简单的一个想法,就是查找二叉树+堆,对于每个节点,会生成一个随机数叫优先级,treap数除了满足查找二叉树的条件外,其节点的优先级要满足堆序,

 不满足的通过左旋转和右旋转维护。详细参考:http://blog.csdn.net/pi9nc/article/details/12244591

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值