Allora. E' sufficiente (ed anche molto più elegante) che fai così:

codice:
#include<stdio.h> 
#include<stdlib.h> 

typedef struct btree_tag{ 
int value; 
struct btree_tag *left; 
struct btree_tag *right; 
}btree; 

void insert(btree* *btpp, int x)
{ 
	while(*btpp!=NULL) 
		if((*btpp)->value>x)btpp=&((*btpp)->left); 
		else btpp=&((*btpp)->right); 

	*btpp=(btree*)malloc(sizeof(btree)); 
	(*btpp)->value=x; 
	(*btpp)->left=NULL; 
	(*btpp)->right=NULL; 
} 

void sbilancia(btree* *new_root, btree *btp)
{ 
	if(btp!=NULL)
	{
		sbilancia(new_root,btp->left);
	
		insert(new_root, btp->value); 

		sbilancia(new_root,btp->right); 
	} 
} 

void visita(btree *pnodo)
{ 
	if(pnodo)
	{ 
		printf("%d ",pnodo->value); 
		visita(pnodo->left); 
		visita(pnodo->right); 
	} 
} 

void main(){ 

btree *albero=NULL; 
btree *nuovo=NULL; 
/* VALORI NODI ALBERO */ 
int valnodi[9]={35,23,40,10,28,37,48,25,26};

int i; 

for(i=0;i<9;i++)insert(&albero,valnodi[i]); 

printf("\n\n"); 
sbilancia(&nuovo,albero); 
visita(nuovo); 

getch();
 
}
Riutilizzi la funzione insert(). Infatti poichè i valori che tu gli passi sono, per la natura stessa dell'albero, crescenti, il risultato sarà un albero sbilanciato a destra.

In alternativa:
codice:
#include<stdio.h> 
#include<stdlib.h> 

typedef struct btree_tag{ 
int value; 
struct btree_tag *left; 
struct btree_tag *right; 
}btree; 

void sbilancia(btree* *new_root, btree *btp)
{ 
	if(btp!=NULL)
	{ 
		sbilancia(new_root,btp->left); 

		while(*new_root) new_root=&((*new_root)->right);
		(*new_root)=(btree*)malloc(sizeof(btree));

		(*new_root)->value=btp->value; 
		(*new_root)->left=NULL; 
		(*new_root)->right=NULL; 

		sbilancia(new_root,btp->right); 
	} 
} 

void insert(btree* *btpp, int x)
{ 
	while(*btpp!=NULL) 
		if((*btpp)->value>x)btpp=&((*btpp)->left); 
		else btpp=&((*btpp)->right); 

	*btpp=(btree*)malloc(sizeof(btree)); 
	(*btpp)->value=x; 
	(*btpp)->left=NULL; 
	(*btpp)->right=NULL; 
} 

void visita(btree *pnodo)
{ 
	if(pnodo)
	{ 
		printf("%d ",pnodo->value); 
		visita(pnodo->left); 
		visita(pnodo->right); 
	} 
} 

void main()
{ 
	btree *albero=NULL; 
	btree *nuovo=NULL; 
	/* VALORI NODI ALBERO */ 
	int valnodi[9]={35,23,40,10,28,37,48,25,26};

	int i; 

	for(i=0;i<9;i++)insert(&albero,valnodi[i]); 

	printf("\n\n"); 
	sbilancia(&nuovo,albero); 
	visita(nuovo); 

	getch(); 
}
Questo qui invece non usa la funzione insert().
Comunque l'errore consisteva nel fatto che, poichè nella ricorsione dereferenziavi il puntatore new_root, praticamente ti spostavi lungo l'albero (andando sempre verso destra) mentre immettevi i valori, per cui alla fine la tua "root" puntava all'ultimo elemento dell'albero.