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,且它的左子树和右子树都是一颗平衡二叉树。
平衡因子(bf):结点的左子树的深度减去右子树的深度,那么显然-1
很显然,平衡二叉树是在二叉排序树(BST)上引入的,就是为了解决二叉排序树的不平衡性导致时间复杂度大大下降,那么AVL就保持住了(BST)的最好时间复杂度O(logn...
分类:
其他好文 时间:
2014-09-06 09:46:03
阅读次数:
332
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
最近几月一直在自学C语言和数据结构,先是写了排序二叉树,觉得平衡二叉树作为一个经典数据结构,有必要实现一下。网上看了些资料,在AVL和红黑树之间考虑,最后个人还是倾向于AVL。不同于标准AVL的是,笔者没有使用平衡因子,直接根据左右孩子的高度差值判断是否平衡。整个平衡二叉树是在普通二叉查找树的基础上...
分类:
编程语言 时间:
2014-08-31 15:39:21
阅读次数:
383
具有以下特性的二叉查找树:(红黑树的深度可以保证是对数级的,它的深度通常和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
AVL树----java
AVL树是高度平衡的二叉查找树
1.单旋转LL旋转
理解记忆:1.在不平衡的节点的左孩子的左孩子插入导致的不平衡,所以叫LL
private AVLTreeNode leftLeftRotation(AVLTreeNode k2) {
AVLTreeNode k1;
k1 = k2.left;
k2.left = k1.right...
分类:
编程语言 时间:
2014-08-20 01:24:31
阅读次数:
223