4、【数据结构】树形结构之平衡二叉查找树(AVL树)

一、AVL树简介
1、定义

    AVL树是高度平衡的二叉查找树,它的特点是:AVL树中任何结点的两个子树的高度最大差别为1。
AVL树的示意图如下:

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:右单旋转,返回旋转后
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值