图解平衡二叉树,AVL树(一) 学习过了二叉查找树,想必大家有遇到一个问题。例如,将一个数组{1,2,3,4}依次插入树的时候,形成了图1的情况。有建立树与没建立树对于数据的增删查改已经没有了任何帮助,反而增添了维护的成本。而只有建立的树如图2,才能够最大地体现二叉树的优点。 在上述的例子中,图2就...
分类:
其他好文 时间:
2015-06-08 00:45:16
阅读次数:
241
一、基本概念 AVL树既是平衡二叉树。AVL树的定义首先要求该树是二叉查找树(满足排序规则),并在此基础上增加了每个节点的平衡因子的定义,一个节点的平衡因子是该节点的左子树树高减去右子树树高的值。 ===================================================...
分类:
其他好文 时间:
2015-06-03 23:05:21
阅读次数:
200
#include
#include
#include
using namespace std;template
struct VALNode
{
int bf;
Type data;
struct VALNode *left;
struct VALNode *right;...
分类:
其他好文 时间:
2015-05-21 14:14:01
阅读次数:
190
红黑树红黑树算是用的比较多,但是平时自己很少写的一种数据结构了,先看下介绍:
红黑树(Red Black Tree) 是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。
看~ 典型是用来实现关联数组,能想到什么数据结构呢?list map set这些容器的底层都是红黑树来实现的。红黑树和AVL树(平衡二叉查找树)红黑树并不是完全平衡的一棵树,所以红黑树是在平均...
分类:
其他好文 时间:
2015-05-19 20:57:02
阅读次数:
222
红黑树(Red Black Tree) 是一种自平衡二叉查找树红黑树和AVL树类似,都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能。它虽然是复杂的,但它的最坏情况运行时间也是非常良好的,并且在实践中是高效的: 它可以在O(log n)时间内做查找,插入和删除,.....
分类:
其他好文 时间:
2015-05-15 22:42:39
阅读次数:
265
//AVL树
#include
#include
using namespace std;
class avl_tree
{
private:
struct tree
{
int data;
tree* L;
tree* R;
int height;
tree(int data_) :data(data_), L(0), R(0), height(0){}...
分类:
编程语言 时间:
2015-05-14 12:01:56
阅读次数:
234
目录一、预备知识二、二叉树三、查找树ADT-----二叉查找树四、AVL树五、伸展树六、树的遍七、B树八、标准库中的集合与映射五、伸展树六、树的遍七、B树八、标准库中的集合与映射第三章节中的List容器,如ArrayList/ LinkedList用于查找时的效率很低,因此Collection AP...
分类:
其他好文 时间:
2015-05-12 22:42:47
阅读次数:
130
一、预备知识二、二叉树三、查找树ADT-----二叉查找树四、AVL树五、伸展树六、树的遍历七、B树八、标准库中的集合与映射
分类:
其他好文 时间:
2015-05-10 23:55:09
阅读次数:
160
1. AVL树的介绍AVL树是根据它的发明者G.M. Adelson-Velsky和E.M. Landis命名的。
它是最先发明的自平衡二叉查找树,也被称为高度平衡树。相比于”二叉查找树”,它的特点是:AVL树中任何节点的两个子树的高度最大差别为1。
如上图(左):非AVL树,如对节点9,左子树高度为0,右子树高...
分类:
其他好文 时间:
2015-04-28 23:00:58
阅读次数:
330
AVL树为了防止树的深度过深出现的一种数据结构,在二叉树的基础上添加了一条规则:每个节点的左子数与右子树的高度最多差1。其中的难点之一为:插入一个节点。删除一个节点更难,在这里采用懒惰删除法。其中,在插入的时候更新根节点路径上那些节点的所有高度。AVL节点:struct AvlNode{ El...
分类:
其他好文 时间:
2015-04-27 20:06:18
阅读次数:
135