索引--优化数据结构--平衡二叉树(avl)

在构建第二版搜索引擎时,为了提高数据结构的效率,作者决定对原始的二叉树进行优化,采用平衡二叉树——AVL树。AVL树能确保查找操作的时间复杂度保持在O(logN),避免了二叉树退化为链表后的性能问题。文章提到了AVL树旋转的重要性,并鼓励读者亲自绘制旋转过程以理解其工作原理。作者分享了部分代码,并引用了CSDN上的一篇文章作为参考来源。
摘要由CSDN通过智能技术生成

天下文章一大抄,最近在做第二版的搜索引擎,比起第一版总要有很大的改进才行。

首先想到的是要对数据结构进行优化,就要把原来“倒排索引--二叉树 http://blog.csdn.net/txgc0/article/details/8697380

这边文章中提到的二叉树进行优化,众所周知,单纯的简单二叉树的坏处就怕退化,退化成一条链表后,这查找速度是相当难以让人接受的。

平衡二叉树的好处就是可以使时间复杂度保持在logN,不至于最坏的情况出现。

当然,越是好东西,越麻烦。

平衡二叉树就最复杂的情况就是树的旋转。这种旋转的过程可以查阅网上的很多文章,说的也比较详细,不过我建议,还是最好自己画画,看看是怎么样一个转换过程。

我算是借鉴一下某位大神的文章得出以下代码:

avl.c

#include "avl.h"

#include "utl.h"

static int Max(int a, int b);
static int Height(struct AVLTree* pNode);

static struct AVLTree* SingleRotateWithLeft(struct AVLTree* pNode);
static struct AVLTree* SingleRotateWithRight(struct AVLTree* pNode);
static struct AVLTree* DoubleRotateWithLeft(struct AVLTree* pNode);
static struct AVLTree* DoubleRotateWithRight(struct AVLTree* pNode);

struct AVLTree* insert_tree(unsigned int nData, struct AVLTree* pNode)
{
    if (NULL == pNode)
    {
        pNode =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值