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

编程入门 行业动态 更新时间:2024-10-28 16:29:27

<a href=https://www.elefans.com/category/jswz/34/1769880.html style=数据结构 编程1年新手视角的平衡二叉树AVL从C与C++实现②"/>

数据结构 编程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(value<node->value){

                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)。

更多推荐

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

本文发布于:2023-11-16 11:13:25,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1619747.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:数据结构   视角   新手   二叉树   AVL

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!