AVL树的插入删除查找算法实现和分析-2(树高度法)

本文介绍了使用二叉树高度来实现AVL树的插入、删除和查找算法,相较于平衡因子法,这种方法思路更清晰,代码更简洁。文章首先讲解了如何计算二叉树高度,然后提供了相关辅助函数,最后详细阐述了插入、删除和查找的算法过程,强调了该方法避免了双重指针和switch...case语句,降低了出错概率,提高了可读性。所有操作的时间复杂度为log2N。
摘要由CSDN通过智能技术生成

在前一篇文章(AVL树的插入删除查找算法实现和分析-1(平衡因子法))中,介绍了如何用平衡因子记录左右子树的高度差的方法来实现AVL树的插入删除和查找的算法,并分析了这种方法的一些缺陷,这里,我将会使用另一种方法来实现这些算法,而且个人觉得比前一篇文章的所写实现更加简单,思路更加清晰。


在介绍这种方法之前,先说说怎么样求一棵二叉树的高度(或深度)。其代码和解释如下:

int BiTreeDepth(BiTree BT)
{
    //求树的深度
    //从二叉树深度的定义可知,二叉树的深度应为其左、右子树深度的最大值加1,
    //而根结点算第0层,高为0。
    if(BT == NULL)  //若为空树,则返回-1
        return -1;
    else
    {
        int nLDepth = BiTreeDepth(BT->LChild); //求左树的深度
        int nRDepth = BiTreeDepth(BT->RChild); //求右树的深度
        if(nLDepth >= nRDepth)
        {
            return nLDepth+1;
        }
        else
        {
            return nRDepth+1;
        }
    }
}
明白了怎么求树高后,下面就开始AVL树的插入删除和查找算法的说解:

类型定义为

typedef int BOOL;
typedef char DataType;

typedef struct AVLNode
{
    DataType Data;      //数据值
    struct AVLNode *LChild; //指向左子树的指针
    struct AVLNode *RChild; //指向右子树的指针
    int Height; //记录以此结点为根的树的高度
}AVLNode, *AVLTree;


其中还有一些要用到辅助函数,如下:

static int Max( int a, int b )
{
    return (a > b ? a : b);
}
//----------------------------------------------------------------------------
static int Height( A
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值