Практикум по курсу "Алгоритмизация и программирование". Часть 2. Андрианова А.А - 95 стр.

UptoLike

. Практикум по курсу «Алгоритмизация и программирование». Часть 2
Заметим, что функцию добавления элемента в дерево удобно использо-
вать и для построения дерева сортировки. Далее приводится пример функции
создания дерева сортировки на основе данных из текстового файла.
// определение функции создания дерева на основе
// данных текстового файла
int CreateTree(char* FileName, Tree*& root)
{
int k;
// открытие файла
FILE* f=fopen(FileName,"r");
if(f==NULL)
{
//Ошибка открытия файла
return -1;
}
// изначально дерево пусто
root=NULL;
// в цикле считываем числа из файла в переменную k
while(fscanf(f,"%d",&k)>0)
// добавляем элемент со значением k в дерево
AddTree(root,k);
fclose(f);
return 1;
}
Задача 2. Дано дерево сортировки. Написать функцию печати элементов
дерева в порядке неубывания.
Согласно правилам построения дерева сортировки сначала следует распе-
чатать элементы левого поддерева, потом элемент самой вершины и, в завер-
шении, элементы правого поддерева.
Очень просто выглядит решение этой задачи с использованием рекурсив-
ной функции, поскольку само определение дерева является рекурсивным
(каждое поддерево также является деревом).
// определение рекурсивной функции распечатки
// значений из узлов дерева в порядке неубывания
void PrintTree(Tree* root)
{
if(root!=NULL)
{
// печатаем значения из левого поддерева узла root
PrintTree(root->left);
95
            .       Практикум по курсу «Алгоритмизация и программирование». Часть 2
    Заметим, что функцию добавления элемента в дерево удобно использо-
вать и для построения дерева сортировки. Далее приводится пример функции
создания дерева сортировки на основе данных из текстового файла.
   // определение функции создания дерева на основе
   // данных текстового файла
   int CreateTree(char* FileName, Tree*& root)
   {
         int k;
         // открытие файла
         FILE* f=fopen(FileName,"r");
         if(f==NULL)
         {
              //Ошибка открытия файла
              return -1;
         }

          // изначально дерево пусто
          root=NULL;
          // в цикле считываем числа из файла в переменную k
          while(fscanf(f,"%d",&k)>0)
               // добавляем элемент со значением k в дерево
               AddTree(root,k);
          fclose(f);
          return 1;
   }

    Задача 2. Дано дерево сортировки. Написать функцию печати элементов
дерева в порядке неубывания.
    Согласно правилам построения дерева сортировки сначала следует распе-
чатать элементы левого поддерева, потом элемент самой вершины и, в завер-
шении, элементы правого поддерева.
    Очень просто выглядит решение этой задачи с использованием рекурсив-
ной функции, поскольку само определение дерева является рекурсивным
(каждое поддерево также является деревом).

   // определение рекурсивной функции распечатки
   // значений из узлов дерева в порядке неубывания
   void PrintTree(Tree* root)
   {
         if(root!=NULL)
         {
              // печатаем значения из левого поддерева узла root
              PrintTree(root->left);

                                      95