AVL树是又叫平衡二叉搜索树,但是它不是完全平衡,只是近似平衡(高度平衡)。什么叫完全平衡?想象一下完全二叉树。
根据名字’二叉搜索树‘,我们可以知道它的一些性质:
1. 每个节点都有一个作为搜索依据的关键码(key),所有节点的关键码互不相同。
2. 左子树上所有节点的关键码(key)都小于根节点的关键码(key)。
3. 右子树上所有节点的关键码(key)都大于根节点的关键码(key)。
除此之外,它还具有一些它独特的性质来维持它的高度平衡。
1. 左子树和右子树的高度之差的绝对值不超过1
2. 树中的每个左子树和右子树都是AVL树
3. 每个节点都有一个平衡因子(balance factor--bf),任一节点的平衡因子是-1,0,1。(每个节点的平衡因子等于右子树的高度减去左子树
的高度)
AVL树有三个值,一个_key(关键码),一个_value(值,目前不要关心这个value是什么),一个_bf(平衡因子)。三个指针,左
孩子指针,右孩子指针,父亲指针。由此我们便得出了AVL树的结构:
template<typename K,typename V>
struct AVLTreeNode
{
K _key;
V _value;
AVLTreeNode<K, V>* _left;
AVLTreeNode<K, V>* _right;
AVLTreeNode<K, V>* _parent;
int _bf;
AVLTreeNode(const K& key, const V& value)
:_key(key)
,_value(value)
,_bf(0)
, _left(NULL)
, _right(NULL)
, _parent(NULL)
{}
};

AVL树是一种高度平衡的二叉搜索树,其左右子树高度差不超过1,确保了高效查找。文章介绍了AVL树的特性,包括关键码比较、平衡因子和旋转算法(左旋、右旋、左右双旋、右左双旋),并讲解如何判断一棵AVL树是否正确。此外,内容涉及AVL树节点的结构,包含关键码、平衡因子和指针等元素。
最低0.47元/天 解锁文章
1415

被折叠的 条评论
为什么被折叠?



