平衡二叉树又称为AVL树,它或者是一颗空树,或者是具有下列性质的二叉树:
(1)它的左子树和右子树都是平衡二叉树。
(2)左子树和右子树的深度之差的绝对值不超过1。
平衡二叉树中有一个重要的概念,平衡因子BF(Balance Factor)定义为该结点的左子树深度减去它的右子树的深度,根据平衡二叉树的性质可知,平衡因子只可能是-1、0和1。
A...
分类:
其他好文 时间:
2015-01-12 09:25:49
阅读次数:
257
treap通过左右旋维护了一个二叉查找树,根据随机的优先级建立满足优先级大根堆的二叉查找树,在实践中有不错的食府,code也简单。cogs1829 普通平衡树题目大意:进行插入、删除、名次、前驱后继。思路:前面的三种操作都很普通,前驱后继有两种做法(非常不正统吧。。。):1)找到这个数的名次,然后+...
分类:
其他好文 时间:
2015-01-10 10:03:48
阅读次数:
251
在数据结构中我们常见的平衡二叉树有AVL树和红黑树。 红黑树和AVL树的区别在于它使用颜色来标识结点的高度,它所追求的是局部平衡而不是AVL树中的非常严格的平衡。 我们来看红黑树的定义:红黑树首先是一棵二叉查找树,它每个结点都被标上了颜色(红色或黑色),红黑树满足以下5个性质: 1、每个结...
分类:
其他好文 时间:
2015-01-08 22:45:31
阅读次数:
215
1:判断是否为平衡二叉树:
//方法1:
int TreeDepth(BTree* pRoot)
{
if (pRoot == NULL)
return 0;
int nLeftDepth = TreeDepth(pRoot->m_pLeft);
int nRightDepth = TreeDepth(pRoot->m_pRight);
return (nLeftD...
分类:
编程语言 时间:
2015-01-07 18:49:54
阅读次数:
202
平衡二叉树定义(AVL):它或者是一颗空树,或者具有以下性质的二叉树:它的左子树和右子树的深度之差的绝对值不超过1,且它的左子树和右子树都是一颗平衡二叉树。平衡因子(bf):结点的左子树的深度减去右子树的深度,那么显然-1“两个结点的变换”如图:就拿第一个来说->点100和101的变换:点101占据...
分类:
其他好文 时间:
2015-01-05 10:44:55
阅读次数:
173
1 #include 2 #include 3 #include 4 #include 5 6 using namespace std; 7 8 template class BSTNode{ 9 public: 10 E data; 11 int ...
分类:
其他好文 时间:
2015-01-01 17:16:49
阅读次数:
137
最近重温《数据结构》,发现其中的东西我上学的时候几乎都没写过。。。 惭愧啊。于是打算一一写点。算是对我逝去青春的纪念。。。avl树的代码网上有很多, 这个在平衡二叉树里面算是比较简单的。 需要注意的就是树的平衡因子和其子树的平衡因子符号相反的旋转情况。这个在函数avl_rotate_right等中有...
分类:
其他好文 时间:
2014-12-25 09:57:38
阅读次数:
219
哈弗曼树、哈弗曼编码、排序二叉树、平衡二叉树、红黑树、3种遍历(先序,后序,中序)、深度-广度优先遍历
分类:
其他好文 时间:
2014-12-21 10:17:49
阅读次数:
305
前言 通过之前对二叉查找树的讨论,我们知道在给定节点数目的情况下,二叉树的高度越低,查找所用时间也就越短. 在讨论红黑树的时候,我们说过红黑树并非完全"平衡"的二叉树,只是近似"平衡".那么这个平衡到底指的是什么呢?有没有完全"平衡"的二叉树?平衡二叉树 什么样的二叉树能被形容为平衡二叉树呢?...
分类:
其他好文 时间:
2014-12-19 21:54:20
阅读次数:
219
首先上一下单纯的二叉树插入节点的代码,用的是不返回新根节点的方式: 1 void insertNode(BTree *&root,int data) 2 { 3 if (root == nullptr)//当根节点为NULL时,在根节点上插入 4 { 5 root =...
分类:
其他好文 时间:
2014-12-16 23:53:45
阅读次数:
425