AVL树(自平衡树)——c++实现

  

AVL树是高度平衡的而二叉树。它的特点是:AVL树中任何节点的两个子树的高度最大差别为1。 
AVL树本质上还是一棵二叉搜索树,它的特点是:
1.本身首先是一棵二叉搜索树。
2.带有平衡条件:每个结点的左右子树的高度之差的绝对值(平衡因子)最多为1。
也就是说,AVL树,本质上是带了平衡功能的二叉查找树(二叉排序树,二叉搜索树)。
既然是树,那么就要有节点:
 View Code

接下来我们给出AVL树的定义

复制代码
template <class T> class AVLTree{     private:                 //根节点        AVLTreeNode<T>* Root;     public:         AVLTree():Root(NULL){}//构造函数                void add(T data);//添加节点的外部接口        int height();//查询高度的外部接口        int max(int a, int b);//比较两个数据的大小    private:         AVLTreeNode<T>* add(AVLTreeNode<T>* &tree, T data);//添加节点的内部接口        int height(AVLTreeNode<T>* tree);//查询高度的内部接口        AVLTreeNode<T>* LL_Rotation(AVLTreeNode<T>* k2);//左左旋转的具体实现        AVLTreeNode<T>* RR_Rotation(AVLTreeNode<T>* k1);//右右旋转的具体实现        AVLTreeNode<T>* LR_Rotation(AVLTreeNode<T>* k3);//左右旋转的具体实现        AVLTreeNode<T>* RL_Rotation(AVLTreeNode<T>* k1);//右左旋转的具体实现         };   
复制代码

1.查询高度

复制代码
/* 高度 作用:获取树的高度  */ template <class T>int AVLTree<T>::height(AVLTreeNode<T>* tree)  {     if (tree != NULL)         return tree->height;      return 0; }  template <class T>int AVLTree<T>::height() {     return height(Root); }
复制代码

2.比较大小

50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信