1.二叉搜索树 1.1定义 是一棵二叉树,每个节点一定大于等于其左子树中每一个节点,小于等于其右子树每一个节点 1.2插入节点 从根节点开始向下找到合适的位置插入成为叶子结点即可:在向下遍历时,如果要插入的值比节点的值小,则向节点的左子树遍历,大于等于则向右子树遍历,如此循环. 1.3删除节点 删除节点x有3种情况: 1.x是叶子结点,则直接删除: 2.x只有一棵子树(左子树或者右子树),则直接将x的父结点指向x的孩子,再删除x节点,如果x是根结点,则要更新x的孩子为树根: 3.x有两棵子树,则…
手写AVL平衡二叉搜索树 二叉搜索树的局限性 先说一下什么是二叉搜索树,二叉树每个节点只有两个节点,二叉搜索树的每个左子节点的值小于其父节点的值,每个右子节点的值大于其左子节点的值.如下图: 二叉搜索树,顾名思义,它的搜索效率很高,可以达到O(logn).但这是理想状况下的,即上图所示.实际上,由于插入顺序的原因,形成的二叉搜索树并不会像上图这样"工整",最坏的情况的下,甚至可能会退化成链表了,如下图: 这显然不是我们想要看的结果,那么我们必须要引入一套机制来避免这种事情的发生,也就是…
1.红黑树和自平衡二叉(查找)树区别 1.红黑树放弃了追求完全平衡,追求大致平衡,在与平衡二叉树的时间复杂度相差不大的情况下,保证每次插入最多只需要三次旋转就能达到平衡,实现起来也更为简单. 2.平衡二叉树追求绝对平衡,条件比较苛刻,实现起来比较麻烦,每次插入新节点之后需要旋转的次数不能预知. AVL树是最早出现的自平衡二叉(查找)树 红黑树和AVL树类似,都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能.红黑树和AVL树的区别在于它使用颜色来标识结点的高度,它…
B B+运用在file system database这类持续存储结构,同样能保持lon(n)的插入与查询,也需要额外的平衡调节.像mysql的数据库定义是可以指定B+ 索引还是hash索引. C++ STL中的map就是用红黑树实现的.AVL树和红黑树都是二叉搜索树的变体,他们都是用于搜索.因为在这些书上搜索的时间复杂度都是O(h),h为树高,而理想状况是h为n.所以构造的办法就是把二叉搜索树改造成AVL树或者红黑树,AVL树是严格维持平衡的,红黑树是黑平衡的.但是维持平衡又需要额外的操作,这…
简介 首先,说一下在数据结构中为什么要引入树这种结构,在我们上篇文章中介绍的数组与链表中,可以发现,数组适合查询这种静态操作(O(1)),不合适删除与插入这种动态操作(O(n)),而链表则是适合删除与插入,而查询效率则就比较慢了,本文要分享学习的树就是为了平衡这种静态操作与动态操作的差距. 一.二叉查找树 简介 满足下面条件就是二叉查找树 任意节点左子树不为空,则左子树的值均小于根节点的值. 任意节点右子树不为空,则右子树的值均大于于根节点的值. 任意节点的左右子树也分别是二叉查找树. 没有键值…
我们这个专题介绍的动态查找树主要有: 二叉查找树(BST),平衡二叉查找树(AVL),红黑树(RBT),B~/B+树(B-tree).这四种树都具备下面几个优势: (1) 都是动态结构.在删除,插入操作的时候,都不需要彻底重建原始的索引树.最多就是执行一定量的旋转,变色操作来有限的改变树的形态.而这些操作所付出的代价都远远小于重建一棵树.这一优势在<查找结构专题(1):静态查找结构概论 >中讲到过. (2) 查找的时间复杂度大体维持在O(log(N))数量级上.可能有些结构在最差的情况下效率将…
B+树索引是B+树在数据库中的一种实现,是最常见也是数据库中使用最为频繁的一种索引. B+树中的B代表平衡(balance),而不是二叉(binary),因为B+树是从最早的平衡二叉树演化而来的. 在讲B+树之前必须先了解二叉查找树.平衡二叉树(AVLTree)和平衡多路查找树(B-Tree),B+树即由这些树逐步优化而来. 二叉查找树 二叉树具有以下性质:左子树的键值小于根的键值,右子树的键值大于根的键值. 如下图所示就是一棵二叉查找树,  对该二叉树的节点进行查找发现深度为1的节点的查找次数…
前言:本文章来源于我在知乎上回答的一个问题 AVL树,红黑树,B树,B+树,Trie树都分别应用在哪些现实场景中? 看完后您可能会了解到这些数据结构大致的原理及为什么用在这些场景,文章并不涉及具体操作(如插入删除等等) 文件夹 AVL树 AVL树原理与应用 红黑树 红黑树原理与应用 B/B+树 B/B+树原理与应用 Trie树 Trie树原理与应用 AVL树 简单介绍: AVL树是最早的自平衡二叉树,在早期应用还相对来说比較广.后期因为旋转次数过多而被红黑树等结构代替(二者都是用来搜索的).AV…
参考文档: avl树:http://lib.csdn.net/article/datastructure/9204 avl树:http://blog.csdn.net/javazejian/article/details/53892797 红黑树:http://daoluan.net/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/%E7%AE%97%E6%B3%95/2013/09/25/rbtree-is-not-difficult.html trie树:https…
HTTP协议漫谈   简介 园子里已经有不少介绍HTTP的的好文章.对HTTP的一些细节介绍的比较好,所以本篇文章不会对HTTP的细节进行深究,而是从够高和更结构化的角度将HTTP协议的元素进行分类讲解. HTTP的定义和历史 在一个网络中.传输数据需要面临三个问题: 1.客户端如何知道所求内容的位置? 2.当客户端知道所求内容的位置后,如何获取所求内容? 3.所求内容以何种形式组织以便被客户端所识别? 对于WEB来说,回答上面三种问题分别采用三种不同的技术,分别为:统一资源定位符(URIs),…