struct User
{
char FName[8]; // ima
char LName[12]; // fam
char OName[12]; // otch
int OverTime; // chasi
};
User cMan;
struct TREE
{
User Man;
TREE *Left, *Right;
};
[C] Бинарное дерево
Струртуры:
Код:
Создаю дерево:
Код:
TREE *CreateTree(TREE *Root, User Data)
{
if (!Root) // Если нет корня
{
Root = new TREE; // создаем корень дерева
Root->Man = Data; // помещаем значения
Root->Left = NULL; // обнуляем указатель на левый элемент
Root->Right = NULL; // обнуляем указатель на правый элемент
return Root;
}
else
if (Root->Man.OverTime > Data.OverTime) // если значение корня больше нового элемента дерева, то
Root->Left = CreateTree(Root->Left, Data); // помещаем значание в левое поддерево
else // иначе
Root->Right = CreateTree(Root->Right, Data); // помещаем значание в правое поддерево
return Root;
}
{
if (!Root) // Если нет корня
{
Root = new TREE; // создаем корень дерева
Root->Man = Data; // помещаем значения
Root->Left = NULL; // обнуляем указатель на левый элемент
Root->Right = NULL; // обнуляем указатель на правый элемент
return Root;
}
else
if (Root->Man.OverTime > Data.OverTime) // если значение корня больше нового элемента дерева, то
Root->Left = CreateTree(Root->Left, Data); // помещаем значание в левое поддерево
else // иначе
Root->Right = CreateTree(Root->Right, Data); // помещаем значание в правое поддерево
return Root;
}
Вывод в инфиксном порядке:
Код:
void tPrint(TREE *Root) // инфиксный порядок
{
if (Root) // если есть корень
{
tPrint(Root->Left); // переходим к левому элементу дерева
printf("%s - %d\n", Root->Man.FName, Root->Man.OverTime); // печатаем содержимое
tPrint(Root->Right); // переходим к правому элементу
}
}
{
if (Root) // если есть корень
{
tPrint(Root->Left); // переходим к левому элементу дерева
printf("%s - %d\n", Root->Man.FName, Root->Man.OverTime); // печатаем содержимое
tPrint(Root->Right); // переходим к правому элементу
}
}
Главная:
Код:
int main()
{
TREE *Root, *R;
int i;
FILE *f;
f = fopen("test.dat", "r+")
rewind(f);
Root = NULL;
while (fread((cMan), sizeof(cMan), 1, f))
{
R = CreateTree(Root, cMan);
tPrint(R);
}
}
{
TREE *Root, *R;
int i;
FILE *f;
f = fopen("test.dat", "r+")
rewind(f);
Root = NULL;
while (fread((cMan), sizeof(cMan), 1, f))
{
R = CreateTree(Root, cMan);
tPrint(R);
}
}
При выводе почему-то информация не упорядоченная. Подскажите где проблема ?
Код:
while (fread((cMan), sizeof(cMan), 1, f))
{
R = CreateTree(Root, cMan);
tPrint(R);
}
{
R = CreateTree(Root, cMan);
tPrint(R);
}
надо
Код:
while (fread((cMan), sizeof(cMan), 1, f))
{
Root = CreateTree(Root, cMan);
}
tPrint(Root);
{
Root = CreateTree(Root, cMan);
}
tPrint(Root);
Спасибо все ок) Я уже так пробовал, но чего-то вылетало у меня, видать когда писал ошибку исправил))