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

UptoLike

. Практикум по курсу «Алгоритмизация и программирование». Часть 2
help->info=key;
help->left=NULL;
help->right=NULL;
root=help;
return;
}
// определяем, в левое или в правое поддерево узла root
// добавляется новый элемент
if(root->info>key)
// рекурсивный вызов функции
// добавления в левое поддерево
AddTree(root->left,key);
else
// рекурсивный вызов функции
// добавления в правое поддерево
AddTree(root->right,key);
}
Теперь рассмотрим нерекурсивный вариант решения задачи.
В случае, когда дерево пусто, поступаем так же, как и в рекурсивном ва-
рианте.
Иначе перемещаемся по узлам дерева в соответствии с правилами, ис-
пользуя вспомогательную переменную help, до тех пор, пока не определим
место вставляемого элемента. Если help->info больше key, то добавление
нового узла осуществляется при условии, что help->left = NULL. Если
же help->info меньше или равно key, то добавление нового узла осуще-
ствляется, когда help->right=NULL. Новый узел связывается с узлом
help с помощью надлежащего указателя (help->left или help-
>right).
// определение нерекурсивной функции добавления
// в дерево нового элемента
void AddTree(Tree*& root, int key)
{
Tree *help,*newNode;
// если дерево пусто, формируем корень дерева
if(root==NULL)
{
root = new Tree;
root->info=key;
root->left=NULL;
root->right=NULL;
return;
93
            .       Практикум по курсу «Алгоритмизация и программирование». Часть 2
                help->info=key;
                help->left=NULL;
                help->right=NULL;
                root=help;
                return;
          }
          // определяем, в левое или в правое поддерево узла root
          // добавляется новый элемент
          if(root->info>key)
               // рекурсивный вызов функции
               // добавления в левое поддерево
               AddTree(root->left,key);
          else
               // рекурсивный вызов функции
               // добавления в правое поддерево
               AddTree(root->right,key);
   }

    Теперь рассмотрим нерекурсивный вариант решения задачи.
    В случае, когда дерево пусто, поступаем так же, как и в рекурсивном ва-
рианте.
    Иначе перемещаемся по узлам дерева в соответствии с правилами, ис-
пользуя вспомогательную переменную help, до тех пор, пока не определим
место вставляемого элемента. Если help->info больше key, то добавление
нового узла осуществляется при условии, что help->left = NULL. Если
же help->info меньше или равно key, то добавление нового узла осуще-
ствляется, когда help->right=NULL. Новый узел связывается с узлом
help с помощью надлежащего указателя (help->left или help-
>right).

    // определение нерекурсивной функции добавления
    // в дерево нового элемента
    void AddTree(Tree*& root, int key)
    {
          Tree *help,*newNode;
          // если дерево пусто, формируем корень дерева
          if(root==NULL)
          {
               root = new Tree;
               root->info=key;
               root->left=NULL;
               root->right=NULL;
               return;

                                      93