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;
}