• 数据结构 编程1年新手视角的平衡二叉树AVL从C与C++实现②


    接下来,是数据的插入

    我们需要对数据插入的结点先进行判断,有如下三个情况

    当插入的数据value<结点的value,应该递归地插入该结点的左子树(的左子树...的左子树)

    当插入的数据value>结点的value,应该递归地插入结点的右子树(的右子树...的右子树)

    直至递归地到达左右子树为空处,顺利插入并申请一个新的空间(new或者malloc放置新数据),此处是函数的出口。

    那么我们可以写出insert函数

    void insert(node*node, int value){

            if(node==NULL){

                    node = newNode(value);

                    return;

            if(valuevalue){

                    insert(node->left, value);

                    node->height = getUpdateHeight(node);

                    if (//LL型 LR 型){

                    //statement;

                    }

            }

            if(value>node->value){

                    insert(node->right, value);

                    node->height = getUpdateHeight(node);

                    if (//RR型 RL型){

                    //statement;

                    }

            }

    }

    以上预留了//statement位置,应对AVL的平衡特性,正如篇①的情况,插入结点可能会导致冲突/不平衡。根据前人的总结,共有以下4种类型:

    LL型(结点的左子树高度-右子树高度==2,即平衡因子==2,且node的左子树的平衡因子==1),

    LL型对应的操作为右旋rightRotate(node)。

    LR型(node的左子树的平衡因子==-1),LR型可看作成LL型与RR型的结合,对应操作是先对node左子树(RR型)进行左旋leftRotate(node->left),再对node本身(LL型)作右旋rightRotate(node)。

    RR型(结点的左子树高度-右子树高度==-2,且node的右子树的平衡因子==-1),

    RR型对应的操作为左旋leftRotate(node)。

    RL型(node的右子树的平衡因子==1),RL型可看作成RR型与LL型的结合,对应操作是先对node右子树(LL型)进行右旋rightRotate(node->right),再对node本身(RR型)作左旋leftRotate(node)。

  • 相关阅读:
    2022新浪商品期货 api ———全网最新唯一爬虫
    【探索C++】C++对C语言的扩展
    C++ final和override的作用,以及使用场合
    并发编程day01
    JVM探究
    为什么基于树的模型在表格数据上仍然优于深度学习
    【FAQ】运动健康服务REST API接口使用过程中常见问题和解决方法总结
    MATLAB循环结构
    K8s 里多容器 Pod 的健康检查探针工作机制分析
    从一道面试题来学习前台进程和后台进程、孤儿进程和僵尸进程
  • 原文地址:https://blog.csdn.net/weixin_68990480/article/details/134226758