一、AVL树简介
1、定义
AVL树是高度平衡的二叉查找树,它的特点是:AVL树中任何结点的两个子树的高度最大差别为1。
AVL树的示意图如下:
![](https://i-blog.csdnimg.cn/blog_migrate/898812e1486b658e3c784dd3e0cadbe4.png)
1.1 结点定义
typedef int DataType;
struct Node
{
DataType key;
int height;
Node *lchild;
Node *rchild;
Node(DataType value, Node *l, Node *r)
:key(value), height(0), lchild(l), rchild(r) {
}
};
1.2 AVL树的定义
class AVLTree
{
private:
Node *root;
public:
AVLTree();
~AVLTree();
//外部接口函数定义
//获取树的高度
int height();
//前序遍历
void preOrder();
//中序遍历
void inOrder();
//后序遍历
void postOrder();
//分层遍历
void levelOrder();
//查找AVL树中键值为key的节点
Node *searchNode(DataType key);
//查找最小节点:返回最小节点的键值
DataType minmum();
//查找最大节点:返回最大节点的键值
DataType maxmum();
//将节点(键值为key)插入到AVL树中
void insertNode(DataType key);
//删除键值为key的节点
void removeNode(DataType key);
//销毁AVL树
void destroyAVLTree();
//打印AVL树
void printAVLTree();
//定义AVL内部接口函数
private:
//获取树的高度
int height(Node *root);
//前序遍历
void preOrder(Node *root) const;
//中序遍历
void inOrder(Node *root) const;
//后序遍历
void postOrder(Node *root) const;
//分层遍历
void levelOrder(Node *root) const;
//查找AVL树中键值为key的节点
Node *searchNode(Node *root, DataType key) const;
//查找最小节点,返回最小节点
Node *minmum(Node *root);
//查找最大节点,返回最大节点
Node *maxmum(Node *root);
//LL:左单旋转,返回旋转后的根节点
Node *leftLeftRotation(Node *k2);
//RR:右单旋转,返回旋转后