//avl_tree.h
#include
using std::stack;
template
class AVL_TREE
{
public:
AVL_TREE(){
nil = new AVL_NODE(0, -1, NULL, NULL);
tree_root = nil;
}
bool find(const T &val) const;
void insert(co...
分类:
其他好文 时间:
2014-09-16 23:44:51
阅读次数:
272
AVL树是最先发明的自平衡二叉查找树, 其增删查时间复杂度都是 O(logn), 是一种相当高效的数据结构。当面对需要频繁查找又经常增删这种情景时,AVL树就非常的适用。
对比红黑树:
红黑树对于数值随机插入性能更好,这种场景实际更常见,故应用更广泛;
AVL 树对于顺序数据插入更有优势;
红黑树部分平衡,降低了旋转的要求;
AVL 树高度平衡,查询操作更具优势;
AVL 树代码更为简单易实现;...
分类:
其他好文 时间:
2014-09-14 20:45:47
阅读次数:
242
——纯属把之前写的搬过来—— 二叉查找树从名字可以看出来,主要用于查找的数据结构。在二叉查找树中存放的数据,理想情况下每次查找都会使数据规模减半,所以查找的时间复杂度为O(log n)。但若构造二叉查找树的数列有序时,二叉查找树就退化为链表,所以二叉查找树最坏时间复杂度仅为O(n)。相对于AVL树....
分类:
其他好文 时间:
2014-09-14 13:58:37
阅读次数:
219
1、AVL树的定义
平衡二叉查找树,又称作AVL树(以提出此树的两人人名命名的),AVL树是一种高度平衡的二叉查找树,它或者是一颗空树,或者是具有下列性质的二叉查找树:
(1)它的左子树和右子树都是平衡二叉查找树
(2)它的左子树和右子树的深度差的绝对值不超过1
将二叉树上的节点的左子树的深度减去右子树的深度的值定义为节点的平衡因子,因此平衡因子的值只可能是:-1、0 和 1。...
分类:
其他好文 时间:
2014-09-13 21:31:15
阅读次数:
269
思路:AVL树是高度平衡的二叉搜索树,这里为了清晰说明,分别判断是否为搜索树,是否为平衡树。struct TreeNode{ struct TreeNode *left; struct TreeNode *right; int key;};//这里先判断是否为二叉搜索树,其次判断是...
分类:
其他好文 时间:
2014-09-13 11:51:45
阅读次数:
205
AVL树本质上还是一棵二叉搜索树,它的特点是:
本身首先是一棵二叉搜索树。
带有平衡条件:每个结点的左右子树的高度之差的绝对值(平衡因子)最多为1
#include
using namespace std;
const int LH = 1;
const int EH = 0;
const int RH = -1;
bool TRUE = 1;
bool F...
分类:
其他好文 时间:
2014-09-02 17:46:25
阅读次数:
176
#include using namespace std;int chy_max(int t1,int t2){ if(t1 left); cout value right); } } private: ...
分类:
其他好文 时间:
2014-09-01 15:32:23
阅读次数:
227
具有以下特性的二叉查找树:(红黑树的深度可以保证是对数级的,它的深度通常和AVL树是一样的)1,每个结点都被标记为红色或者黑色2,根是黑色的3,如果某个结点是红色的,那么它的孩子是黑色的(连续的红色结点是不允许的)4,每一条从某个结点到一个null链的路径必须包含相同数量的黑色结点自下而上的插入:1...
分类:
其他好文 时间:
2014-08-29 15:58:18
阅读次数:
240
平衡二叉树的定义 平衡二叉查找树,又称AVL树。它除了具备二叉查找树的基本特征之外,还具有一个非常重要的特点:它的左子树和右子树都是平衡二叉树,且左子树和右子树的深度之差的绝对值(平衡因子)不超过1。也就是说AVL树每个节点的平衡因子只可能是-1、0和1(左子树高度减去右子树高度)。那么如何是二叉查...
分类:
其他好文 时间:
2014-08-23 11:09:30
阅读次数:
207