예제 #1
0
node *rotate(node *tree,int num)
{
	if(num<tree->data)
	{
		if(tree->left !=NULL)
		{
//printf("%d\n",tree->data);
			if(tree->left->data==num)
			{
				tree=singleleft(tree);
			}
					else
			{tree->left=rotate(tree->left,num);
			}
		}
		return tree;
	}
	else if(num>tree->data)
	{
		if(tree->right!=NULL)
		{
//printf("i%d\n",tree->data);
			if(tree->right->data==num)
			{
				tree=singleright(tree);
			}
						else
			{tree->right=rotate(tree->right,num);
			}
		}
		return tree;
	}
}
예제 #2
0
파일: avl.c 프로젝트: CoryXie/nix-os
static void
balance(Avl **tp, Avl *p)
{
	switch((*tp)->bal){
	case -2:
		if((*tp)->n[0]->bal <= 0)
			singleright(tp, p);
		else if((*tp)->n[0]->bal == 1)
			doubleleftright(tp, p);
		else
			assert(0);
		break;

	case 2:
		if((*tp)->n[1]->bal >= 0)
			singleleft(tp, p);
		else if((*tp)->n[1]->bal == -1)
			doublerightleft(tp, p);
		else
			assert(0);
		break;
	}
}
예제 #3
0
파일: avl.c 프로젝트: CoryXie/nix-os
static void
doubleleftright(Avl **tp, Avl *p)
{
	singleleft(&(*tp)->n[0], *tp);
	singleright(tp, p);
}