小结: 1.红黑树:典型的用途是实现关联数组 2.旋转 当我们在对红黑树进行插入和删除等操作时,对树做了修改,那么可能会违背红黑树的性质.为了保持红黑树的性质,我们可以通过对树进行旋转,即修改树中某些结点的颜色及指针结构,以达到对红黑树进行插入.删除结点等操作时,红黑树依然能保持它特有的性质(五点性质). https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-046j-introduction-to-a…
前言: 节主要是给出BST,AVL和红黑树的C++代码,方便自己以后的查阅,其代码依旧是data structures and algorithm analysis in c++ (second edition)一书的作者所给,关于这3中二叉树在前面的博文算法设计和数据结构学习_4(<数据结构和问题求解>part4笔记)中已经有所介绍.这里不会去详细介绍它们的实现和规则,一是因为这方面的介绍性资料超非常多,另外这3种树的难点都在插入和删除部分,其规则本身并不多,但是要用文字和图形解释其实还蛮耗…
(BST&AVL&红黑树简单介绍) 前言: 节主要是给出BST,AVL和红黑树的C++代码,方便自己以后的查阅,其代码依旧是data structures and algorithm analysis in c++ (second edition)一书的作者所给,关于这3中二叉树在前面的博文算法设计和数据结构学习_4(<数据结构和问题求解>part4笔记)中已经有所介绍.这里不会去详细介绍它们的实现和规则,一是因为这方面的介绍性资料超非常多,另外这3种树的难点都在插入和删除部分…
我们这个专题介绍的动态查找树主要有: 二叉查找树(BST),平衡二叉查找树(AVL),红黑树(RBT),B~/B+树(B-tree).这四种树都具备下面几个优势: (1) 都是动态结构.在删除,插入操作的时候,都不需要彻底重建原始的索引树.最多就是执行一定量的旋转,变色操作来有限的改变树的形态.而这些操作所付出的代价都远远小于重建一棵树.这一优势在<查找结构专题(1):静态查找结构概论 >中讲到过. (2) 查找的时间复杂度大体维持在O(log(N))数量级上.可能有些结构在最差的情况下效率将…
树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right): 2.所有结点存储一个关键字: 非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树: 如: BST树的搜索,从根结点开始,如果查询的关键字与结点的关键字相等,那么就命中: 如果BST树的所有非叶子结点的左右子树的结点数目均保持差不多(平衡),那么B树 的搜索性能逼近二分查找:但它比连续内存空间的二分查找的优点是,改变BST树结构 插入与删除结点)不需要移动大段的内存数据,甚至通常是常数开销: 如:…
AVL树.splay树(伸展树)和红黑树比较 一.AVL树: 优点:查找.插入和删除,最坏复杂度均为O(logN).实现操作简单 如过是随机插入或者删除,其理论上可以得到O(logN)的复杂度,但是实际情况大多不是随机的.如果是随机的,则AVL    树能够达到比RB树更优的结果,因为AVL树的高度更低.如果只进行插入和查找,则AVL树是优于RB树的,因为RB树    更多的优势还是在删除动作上. 缺点:1)借助高度或平衡因子,为此需要改造元素结构,或额外封装-->伸展树可以避免. 2)实测复杂…
参考:自平衡二叉查找树 ,红黑树, 算法:理解红黑树 (英文pdf:红黑树) 目录 自平衡二叉树介绍 avl树 2-3树 LLRBT(Left-leaning red-black tree左倾红黑树 (代码见git) 2-3-4树和红黑树 avl和红黑树的比较 自平衡二叉查找树 诞生的目的: 它是为了解决二叉查找树的查找时间复杂度最差是O(n)的问题而发明的数据结构. 完全二叉树的公式: n = 2h - 1 BST的查找运行时间和BST的高度有关.一个树的高度指的是从树的根开始所能到达的最长的…
首先讲解一下AVL树: 例如,我们要输入这样一串数字,10,9,8,7,15,20这样一串数字来建立AVL树 1,首先输入10,得到一个根结点10 2,然后输入9, 得到10这个根结点一个左孩子结点9 3,再输入8,这个时候8,9,10就在一条线上了,这时候就需要旋转,让9成为根结点 然后就这样一直输入,遇到不能满足AVL条件的时候就旋转. 发现了没有,AVL树为了满足绝对的平衡,在中途会有很多次这样的旋转. 然而红黑树的它的条件是那5条性质,这5条性质没有要求绝对平衡,这样同样的数据建立红黑树…
平衡树是平时经常使用数据结构. C++/JAVA中的set与map都是通过红黑树实现的. 通过了解平衡树的实现原理,可以更清楚的理解map和set的使用场景. 下面介绍AVL树和红黑树. 1. AVL树 2.红黑树 在一颗含有N个结点的树中,我们希望树高为~lgN,这样我们就能保证所有查找都能在~lgN此比较内结束,就和二分查找一样.不幸的是,在动态插入中保证树的完美平衡的代价太高了.我们放松对完美平衡的要求,使符号表API中所有操作均能够在对数时间内完成. 2-3查找树 为了保证查找树的平衡性…
某些教程不区分普通红黑树和左倾红黑树的区别,直接将左倾红黑树拿来教学,并且称其为红黑树,因为左倾红黑树与普通的红黑树相比,实现起来较为简单,容易教学.在这里,我们区分开左倾红黑树和普通红黑树. 红黑树是一种近似平衡的二叉查找树,从2-3树或2-3-4树衍生而来.通过对二叉树节点进行染色,染色为红或黑节点,来模仿2-3树或2-3-4树的3节点和4节点,从而让树的高度减小.2-3-4树对照实现的红黑树是普通的红黑树,而2-3树对照实现的红黑树是一种变种,称为左倾红黑树,其更容易实现. 使用平衡树数据…