二叉查找树是个好东西,他让查找,插入,删除,这些常用操作变得高效,但是,他是存在问题的,那就是,在坏的输入序列下,树会退化成链表,这就很尴尬了,于是为了避免这种情况的发生,我们需要一种数据结构,可以自动对树进行调整,我们希望树尽量平衡,于是我们使用平衡因子作为指标,保持任意节点左右子树深度差不超过1 ...
分类:
编程语言 时间:
2016-05-21 06:36:33
阅读次数:
274
平衡二叉树AVL 简介,C++ 封装与模板的实现...
分类:
编程语言 时间:
2016-05-20 11:53:47
阅读次数:
303
我们讨论过,树的搜索效率与树的深度有关。二叉搜索树的深度可能为n,这种情况下,每次搜索的复杂度为n的量级。AVL树通过动态平衡树的深度,单次搜索的复杂度为log(n)。我们下面看伸展树(splay tree),它对于m次连续搜索操作有很好的效率。伸展树会在一次搜索后,对树进行一些特殊的操作。这些操作 ...
分类:
其他好文 时间:
2016-05-18 21:16:09
阅读次数:
154
rb_tree是一种特殊的二叉搜索树,但是其对平衡的要求比avl_tree低,avl_tree要求左右子树的高度差不能大于1,而rb_tree只要求从一个节点至树的尾端的任何路径的黑节点的个数相等rb_tree必须满足的规则:
1.每个节点不是黑色就是红色;
2.根节点必须为黑色;
3.若节点为红色,则其子节点必须为黑色(红不连);
4.任意节点至树尾端的任何路径的黑色节点的个...
分类:
其他好文 时间:
2016-05-13 01:49:49
阅读次数:
252
AVL树写的不耐烦了,索性一次性代码贴上。。。
/**
2 * AVL树(C语言): C语言实现的AVL树。
3 *
4 * @author skywang
5 * @date 2013/11/07
6 */
#include
#include
#define HEIGHT(p) ( (p==NULL) ? -1 : (((Node *)(...
分类:
其他好文 时间:
2016-05-12 19:51:55
阅读次数:
222
红黑树也是一种而叉搜索树,因此二叉搜索树的性质红黑树都具有,同时,我们知道为了避免最坏情况下的二叉搜索树(就是高度不平衡的情况)衍生出了AVL树,使其任何节点的左右子树的高度差相差最多1,从而达到平衡,以确保最坏情况下的搜索效率。当然红黑树为了比较好的搜索效率降低了对平衡的要求,但是红黑树仍然具有良好的平衡状态。
AVL树与RB_tree
AVL树也称为高度平衡树,其插入,删除...
分类:
其他好文 时间:
2016-05-12 16:42:22
阅读次数:
363
前言
大家都玩过球球大作战的游戏吧,他的原型是Agar.IO,在这款游戏了我们扮演一个小球,刚出生的我们除了速度快,视野生存能力都一般,为了追求某种平衡,通过不断的吞噬其他小球来让自己变大,变长,但是我们的速度却在下降.这个追逐平衡的过程呢,就是我们今天的主题,AVL树,AVL树也叫二叉平衡树,是一种二叉排序树,其中每一个节点的左子树和右子树高度差至多等于1.这样做的好处是,我们的查找会非常方便...
分类:
其他好文 时间:
2016-05-12 15:16:00
阅读次数:
133
平衡二叉树:
AVL树属于二叉查找树,在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为高度平衡树。查找、插入和删除在平均和最坏情况下都是O(logn),增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。
二叉查找树的查找和插入操作在最坏情况下复杂度为O(N),而AVL树最坏时仍然为O(lgN)。
平衡二叉树(Self-Balancing Bi...
分类:
其他好文 时间:
2016-05-12 12:05:27
阅读次数:
297
AVL树的性质1.左子树和右子树的高度之差的绝对值不超过12.树中的每个左子树和右子树都是AVL树3.每个节点都有一个平衡因子(balancefactor--bf),任一节点的平衡因子是-1,0,1。(每个节点的平衡因子等于右子树的高度减去左子树的高度)#pragmaonce
template<classK,classV>
s..
分类:
编程语言 时间:
2016-05-07 16:50:11
阅读次数:
246
http://blog.csdn.net/niteip/article/details/11840691 平衡二叉树(Balanced Binary Tree)是二叉查找树的一个进化体,也是第一个引入平衡概念的二叉树。1962年,G.M. Adelson-Velsky 和 E.M. Landis发明 ...
分类:
其他好文 时间:
2016-04-30 10:06:46
阅读次数:
277