Exemplo n.º 1
0
node* insert(node* start,int n)
{
	if(start==NULL)
	{
		start=(node*)malloc(sizeof(node));
		start->left=NULL;
		start->right=NULL;
		start->num=n;
	}
	else if(start->num > n)
	{
		start->left=insert(start->left,n);
		if((he(start->left)) - (he(start->right))==2)
		{
			if(start->left->num>n)
				start=single_left(start);
			else
				start=double_left(start);
		}
	}
	else if(start->num < n)
	{
		start->right=insert(start->right,n);
		if((he(start->right)) - (he(start->left))==2)
		{
			if(start->right->num < n)
				start=single_right(start);
			else
				start=double_right(start);
		}
	
	}
	start->height=he(start);
	return start;
}
Exemplo n.º 2
0
static dbtype_t
balance_left(pgctx_t *ctx, dbtype_t left, dbtype_t right, dbtype_t orig)
{
    dbval_t *r = dbptr(ctx, right);
    uint64_t rln = bonsai_size(ctx, r->left);
    uint64_t rrn = bonsai_size(ctx, r->right);
    return (rln < rrn) ?
        single_left(ctx, left, right, orig) :
        double_left(ctx, left, right, orig) ;
}
Exemplo n.º 3
0
node* double_right(node* start)
{
	start->right=single_left(start->left);
	return single_right(start);
}