Ну, я давно этим занимаюсь ... пытаясь выяснить алгоритм для вставки моего списка случайных чисел в двоичное дерево.
Это то, что я получил до сих пор:
NodePtr и Tree - указатели на узел
NodePtr CreateTree(FILE * fpData)
{
int in;
fscanf(fpData, "%i", &in);
Tree T = (NodePtr)malloc(sizeof(Node));
T->Left = NULL;
T->Right = NULL;
T->value = in;
while((fscanf(fpData, "%i", &in)) != EOF)
{
InsertInTree(in, T);
printf("\n %p", T);
}
return T;
}
void InsertInTree(int value,Tree T)
{
if(T == NULL)
{
T->Left = (NodePtr)malloc(sizeof(Node));
T->Left->Left = NULL;
T->Left->Right = NULL;
T->Left->value = value;
printf("\n %i ", value);
return;
}
if(T->Left == NULL)
{
InsertInNull(value, T->Left);
}
else if(T->Right == NULL)
{
InsertInNull(value, T->Right);
}
else
{
if(T->Left->Left == NULL || T->Left->Right == NULL) InsertInTree(value, T->Left);
else InsertInTree(value, T->Right);
}
}
Я заблудился, что делать, если оба ребенкаконкретного узла не являются нулевыми.То, что я сделал здесь, работает для небольшого количества чисел (1,2,3,5,6), но если список больше, он становится несбалансированным и неправильным.