Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

[C] Бинарное дерево

32K
10 мая 2010 года
xface
43 / / 07.11.2009
Привет. Мне требуется создать бинарное дерево, упорядоченное по кол-ву часов и осуществить просмотр дерева в инфиксном порядке. Вот тут я реализовал процедуры,

Струртуры:
Код:
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;
};


Создаю дерево:
Код:
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;
}


Вывод в инфиксном порядке:
 
Код:
void tPrint(TREE *Root) // инфиксный порядок
{
    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);
  }
}


При выводе почему-то информация не упорядоченная. Подскажите где проблема ?
1.8K
10 мая 2010 года
LM(AL/M)
332 / / 20.12.2005
вместо
 
Код:
while (fread((cMan), sizeof(cMan), 1, f))
 {
   R = CreateTree(Root, cMan);
   tPrint(R);
  }


надо
 
Код:
while (fread((cMan), sizeof(cMan), 1, f))
{
   Root = CreateTree(Root, cMan);
}
tPrint(Root);
32K
10 мая 2010 года
xface
43 / / 07.11.2009
Спасибо все ок) Я уже так пробовал, но чего-то вылетало у меня, видать когда писал ошибку исправил))
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог