Exemple #1
0
bool AVLinsert(nodeTree *&root, nodeTree *node, bool &taller)
{
	bool ret = 1;
	if (root == NULL)
	{
		root = node;
		taller = true;
		return 1;
	}
	else if (node->key == root->key)
	{
		taller = false;
		ret = 0;
	}
	else if (node->key < root->key)
	{
		ret = AVLinsert(root->pLeft, node, taller);
		if (taller == true)
		{
			switch (root->balance)
			{
			case -1:
				AVLleftBalance(root, taller);
				taller = false;
				break;
			case 0:
				root->balance = -1;
				break;
			case 1:
				root->balance = 0;
				taller = false;
				break;
			}
		}
	}
	else
	{
		ret = AVLinsert(root->pRight, node, taller);
		if (taller == true)
			switch (root->balance)
			{
			case -1:
				root->balance = 0;
				taller = false;
				break;
			case 0:
				root->balance = 1;
				break;
			case 1:
				AVLrightBalance(root, taller);
				taller = false;
				break;
			}
	}

	return ret;
}
Exemple #2
0
void AVLinsert (BST &T,records R,int &unblanced)
{
    if(!T)
    {
        unblanced=1;
        T=new node;
        T->data=R;
        T->lchild=T->rchild=NULL;
        T->bf=0;
    }
    else if(R.key<T->data.key)
    {
        AVLinsert(T->lchild,R,unblanced);
        if(unblanced)
            switch(T->bf)
        {
            case -1:T->bf=0;
            unblanced=0;
            break;
            case 0:T->bf=1;
            break;
            case 1:LeftRotation(T,unblanced);
            default:break;
        }

    }
    else if(R.key>T->data.key)
    {
        AVLinsert(T->rchild,R,unblanced);
        if(unblanced)
            switch(T->bf)
        {
            case -1:
            RightRotation(T,unblanced);
            break;
            case 0:T->bf=-1;
            break;
            case 1:
            T->bf=0;
            unblanced=0;
            break;
            default:break;
        }
    }
    else
        unblanced=0;
}
Exemple #3
0
bool addNode(nodeTree *node)
{
	if (!isAVL)
	{
		return BSTinsert(myTree->root, node);
	}
	else
	{
		bool taller;
		return AVLinsert(myTree->root, node, taller);
	}
}
Exemple #4
0
BST CreatBST()
{
    BST T=NULL;
    keytype key;
    scanf("%d",&key);
    records R;
    R.key=key;
    while(key)
    {
         R.key=key;
        AVLinsert(T,R,unblanced);
        scanf("%d",&key);

    }
    return T;
}