平衡二叉树又称为AVL树,它或者是一颗空树,或者是具有下列性质的二叉树:
(1)它的左子树和右子树都是平衡二叉树。
(2)左子树和右子树的深度之差的绝对值不超过1。
平衡二叉树中有一个重要的概念,平衡因子BF(Balance Factor)定义为该结点的左子树深度减去它的右子树的深度,根据平衡二叉树的性质可知,平衡因子只可能是-1、0和1。
A...
分类:
其他好文 时间:
2015-01-12 09:25:49
阅读次数:
257
在数据结构中我们常见的平衡二叉树有AVL树和红黑树。 红黑树和AVL树的区别在于它使用颜色来标识结点的高度,它所追求的是局部平衡而不是AVL树中的非常严格的平衡。 我们来看红黑树的定义:红黑树首先是一棵二叉查找树,它每个结点都被标上了颜色(红色或黑色),红黑树满足以下5个性质: 1、每个结...
分类:
其他好文 时间:
2015-01-08 22:45:31
阅读次数:
215
最近重温《数据结构》,发现其中的东西我上学的时候几乎都没写过。。。 惭愧啊。于是打算一一写点。算是对我逝去青春的纪念。。。avl树的代码网上有很多, 这个在平衡二叉树里面算是比较简单的。 需要注意的就是树的平衡因子和其子树的平衡因子符号相反的旋转情况。这个在函数avl_rotate_right等中有...
分类:
其他好文 时间:
2014-12-25 09:57:38
阅读次数:
219
前言 通过之前对二叉查找树的讨论,我们知道在给定节点数目的情况下,二叉树的高度越低,查找所用时间也就越短. 在讨论红黑树的时候,我们说过红黑树并非完全"平衡"的二叉树,只是近似"平衡".那么这个平衡到底指的是什么呢?有没有完全"平衡"的二叉树?平衡二叉树 什么样的二叉树能被形容为平衡二叉树呢?...
分类:
其他好文 时间:
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
1、AVL树: 1)其左子树(TL)与右子树(TR)是AVL树; 2)|HL-HR| 3 #include 4 #include 5 using namespace std; 6 7 typedef struct AVLTree{ 8 int ndata; 9...
分类:
其他好文 时间:
2014-12-05 16:55:27
阅读次数:
279
摘要本文主要讨论的内容包括:BST的性质以及基本操作分析。作为最基本的数据结构,二叉查找树(后文记为BST)本身不仅易于理解,代码精简,而且通过添加不同的特性,可以实现许多高级的数据结构,例如:添加颜色信息,升级为红黑树;添加高度和平衡信息,升级为AVL树;更改节点数量,成为2-3-4树等更为复杂的...
分类:
其他好文 时间:
2014-11-30 13:52:12
阅读次数:
408
这道题也不是非常的难,弄楚平衡二叉树(AVL)的判断方法就行:1.判断左子树高度与右子树高度之差是否小于12.判断根节点左子树是否满足平衡二叉3.判断根节点右子树是否满足平衡二叉满足以上三个条件才是AVL树 1 /** 2 * Definition for binary tree 3 * str.....
分类:
其他好文 时间:
2014-11-29 17:31:39
阅读次数:
199
这几天学习了AVL树(平衡二叉搜索树),遂写一篇总结与大家分享。包括五个部分:
一、AVL树(平衡二叉搜索树)是什么?
二、为什么要用AVL树?
三、AVL树的实现原理
四、完整的实现代码(C++和Java)
五、测试程序分析...
分类:
编程语言 时间:
2014-11-22 23:12:49
阅读次数:
492