AVL树又称高度平衡的二叉搜索树。
性质:
1. 左子树和右子树的高度之差的绝对值不超过1
2. 树中的每个左子树和右子树都是AVL树
3. 每个节点都有一个平衡因子(balance factor--bf),任一节点的平衡因子是-1,0,1。(每个节点的平衡因子等于右子树的高度减去左子树的高度 )
当插入一个节点时,如果这个节点的父节点的平衡因子不满足AVL树的特点,这时就需要对AVL树进行调整,即旋转。
1、左单旋转
2、右单旋转
3、左右旋转
4、右左旋转
实现代码如下:
#pragma once
template<class K,class V>
struct AVLTreeNode
{
AVLTreeNode<K,V>* _left;
AVLTreeNode<K,V>* _right;
AVLTreeNode<K,V>* _parent;
K _key;
V _value;
int _bf;//平衡因子
AVLTreeNode(const K& key,const V& value)
:_bf(0)
,_left(NULL)
,_right(NULL)
,_parent(NUL