天下文章一大抄,最近在做第二版的搜索引擎,比起第一版总要有很大的改进才行。
首先想到的是要对数据结构进行优化,就要把原来“倒排索引--二叉树 ”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 =