Witam!
Mam za zadanie zbalansowac drzewo bez używania dodatkowych liczników ale, kompletnie nie wiem jak to zobić.
Zamieszczam kod który tworzy drzewo.

 #include <stdlib.h>
#include<stdio.h>
typedef int Data;
typedef struct tagTree
{
        struct tagTree *left, *right;
        Data data;
} Tree;

typedef int BOOL;

#define TRUE 1
#define FALSE 0

BOOL Rel(Data l,Data r)
{
     return l < r;
}
    
Tree* CreateLeaf(Data d)
{
      Tree *t = (Tree*)malloc(sizeof(Tree));
      t -> data = d;
      t->left = t->right = NULL;
      return t;
      
}

void AddLeaf(Data d, Tree **tr)
{
     if(*tr)
     {
            if(Rel((*tr)->data,d))
            AddLeaf(d,&(*tr)->left);
            else
            AddLeaf(d,&(*tr)->right);
     }
     else
     *tr = CreateLeaf(d);
}


void NodeOut(int level,Tree *nd)
{
     int i;
     for(i=1;i<level;++i)
     printf(" ");
     printf("%d\n",nd->data);
}
void PrintTree(int level,Tree *tr)
{
     if(tr)
     {
           NodeOut(level,tr);
           PrintTree(level+1,tr->left);
            PrintTree(level+1,tr->right);
            }
}

int main(void)
{
    Data i;
    Tree *root=NULL, *root1=NULL;
    
    do
    {
         scanf("%d",&i);
         AddLeaf(i,&root);
    }
    while(i);
    PrintTree(1,root);
    system("pause");
    return 0;
}