如何检查二叉树是否仍然保留AVL并进行维护?

时间:2013-11-02 15:34:58

标签: c++ avl-tree

我在使用C ++为大学项目创建AVL树结构时遇到了一些麻烦。到目前为止,我设法制作了简单的添加和删除功能,但问题出现了!我在这里看到了一些代码,其中直接在add函数中进行了检查,但我不想复制代码。有没有办法创建一个单独的功能,完成这项工作?我无法工作的是如何让程序理解我必须去哪个轮换案例。

到目前为止,我的代码是:

struct node
{
    unsigned int target;
    struct node *left;
    struct node *right;
};

int ClassInvertedIndex::Height(struct node *toCheck)
{
    int left, right;

    if(toCheck == NULL)
        return 0;
    left = Height(toCheck->left);
    right = Height(toCheck->right);
    if(left > right)
        return left+1;
    else
        return right+1;
}

void ClassInvertedIndex::maintainAVL(struct node *toCheck)
{
    if(Height(toCheck->left)-Height(toCheck->right) == 2);  //Left subtree problem.

    if(Height(toCheck->right)-Height(toCheck->left) == 2);  //Right subtree problem.
}


bool ClassInvertedIndex::addNode(unsigned int x)
{
    return insideAdd(data, x);
}



bool ClassInvertedIndex::insideAdd(struct node *toAdd, unsigned int x)
{
    if(toAdd == NULL)
    {
        toAdd = new struct node;

        if(toAdd == NULL)
        {
            cout << "Could not allocate memory.";
            return false;
        }

        toAdd->left = NULL;
        toAdd->right = NULL;
        toAdd->target = x;
        return true;
    }

    else if(x < toAdd->target)
    {
        bool result;
        result = insideAdd(toAdd->left, x);
        if(result)
        {
            //maintainAVL(toAdd);
        }
        return result;
    }

    else if(x > toAdd->target)
    {
        bool result;
        result = insideAdd(toAdd->right, x);
        if(result)
        {
            //maintainAVL(toAdd);
        }
        return result;
    }

    else       //x already exists.
    {
        return false;
    }
}

所以,在maintainAVL方法中,我该怎么做才能决定我需要什么样的轮换?

0 个答案:

没有答案