[Программирование] Обычное двоичное дерево для тестового задания

Автор Сообщение
news_bot ®

Стаж: 6 лет 3 месяца
Сообщений: 27286

Создавать темы news_bot ® написал(а)
26-Июн-2021 23:35


Как-то раз я делал задание для приёма на работу после собеседования, что-то вроде тестового задания только не на дом. Был интернет и я гуглил код на языке Си и нашел какой-то код который содержал ошибки, из-за этого я не смог сделать задание на которое выделили час. Почему так случилось скажу лишь то, что по программированию у меня было все плохо по минимуму и своего кода для деревьев у меня не было и для графов тоже.И так приступим с основ:Двои́чное де́рево — иерархическая структура данных, в которой каждый узел имеет не более двух потомков (детей). Как правило, первый называется родительским узлом, а дети называются левым и правым наследниками. Двоичное дерево не является упорядоченным ориентированным деревом.[1]
//Листинг #1            Бинарное дерево, представление
#include <iostream>
#include <conio.h>
using namespace std;
//Наша структура
struct node
{
  int info;                           //Информационное поле
  node *l, *r;                        //Левая и Правая часть дерева
};
node *tree = NULL;                      //Объявляем переменную, тип которой структура Дерево
/*ФУНКЦИЯ ЗАПИСИ ЭЛЕМЕНТА В БИНАРНОЕ ДЕРЕВО*/
void push(int a, node **t)
{
  if ((*t) == NULL)                   //Если дерева не существует
  {
    (*t) = new node;                //Выделяем память
    (*t)->info = a;                 //Кладем в выделенное место аргумент a
    (*t)->l = (*t)->r = NULL;       //Очищаем память для следующего роста
    return;                         //Заложили семечко, выходим
  }
  //Дерево есть
  if (a > (*t)->info) push(a, &(*t)->r); //Если аргумент а больше чем текущий элемент, кладем его вправо
  else push(a, &(*t)->l);         //Иначе кладем его влево
}
/*ФУНКЦИЯ ОТОБРАЖЕНИЯ ДЕРЕВА НА ЭКРАНЕ*/
void print(node *t, int u)
{
  if (t == NULL) return;                  //Если дерево пустое, то отображать нечего, выходим
  else //Иначе
  {
    print(t->l, ++u);                   //С помощью рекурсивного посещаем левое поддерево
    for (int i = 0; i < u; ++i) cout << "|";
    cout << t->info << endl;            //И показываем элемент
    u--;
  }
  print(t->r, ++u);                       //С помощью рекурсии посещаем правое поддерево
}
int sum(node *node_) {
  if (node_ == 0) return 0;
  return node_->info + sum(node_->l) + sum(node_->r);
}
int main()
{
  int n = 16;                              //Количество элементов
  int s;                              //Число, передаваемое в дерево
  for (int i = 0; i < n; ++i)
  {
    s = -5 + rand() % 10;                       //Считываем элемент за элементом
    push(s, &tree);                 //И каждый кладем в дерево
  }
  cout << "ваше дерево\n";
  print(tree, 0);
  cout << "сумма\n"<<
    sum(tree) << endl;
  cin.ignore().get();
}
Данный код задает дерево и считает рекурсивно сумму его вершин. Дерево неупорядочено и не отсортировано.Может быть мне или кому-нибудь еще пригодится данный код для устройства на работу, просто сейчас очень многие постят код который с ошибками в глуповатых статьях и сайтах.Спасибо за внимание!
===========
Источник:
habr.com
===========

Похожие новости: Теги для поиска: #_programmirovanie (Программирование), #_dvoichnye_derevja (двоичные деревья), #_derevo (дерево), #_derevja (деревья), #_si (си), #_programmirovanie (
Программирование
)
Профиль  ЛС 
Показать сообщения:     

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы

Текущее время: 13-Май 21:48
Часовой пояс: UTC + 5