[Программирование] Обычное двоичное дерево для тестового задания
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Как-то раз я делал задание для приёма на работу после собеседования, что-то вроде тестового задания только не на дом. Был интернет и я гуглил код на языке Си и нашел какой-то код который содержал ошибки, из-за этого я не смог сделать задание на которое выделили час. Почему так случилось скажу лишь то, что по программированию у меня было все плохо по минимуму и своего кода для деревьев у меня не было и для графов тоже.И так приступим с основ:Двои́чное де́рево — иерархическая структура данных, в которой каждый узел имеет не более двух потомков (детей). Как правило, первый называется родительским узлом, а дети называются левым и правым наследниками. Двоичное дерево не является упорядоченным ориентированным деревом.[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
===========
Похожие новости:
- [] Вебинар «Анализ данных проще с ITMO FS»
- [Разработка веб-сайтов, JavaScript, Программирование, ReactJS] React испортил веб-разработку (перевод)
- [Программирование, Java] Применение JDBC в процессе ETL
- [Тестирование IT-систем, Сетевые технологии, Тестирование веб-сервисов, Развитие стартапа] Продукт без тестирования
- [Экология, Урбанизм, Инженерные системы] Пузыри — вверх! Речной барьер, который защищает море от пластика
- [1С-Битрикс, CRM-системы] Как мы не смогли подобрать подрядчика и внедряли CRM сами. Главные ошибки и их решения
- [Разработка веб-сайтов, Работа с видео, Программирование, Видеоконференцсвязь] How to make a multipoint WebRTC conference (MCU) with recording and screen-sharing in the browser
- [Разработка веб-сайтов, Работа с видео, Программирование, Видеоконференцсвязь] Как сделать многоточечную WebRTC-конференцию (MCU) с записью и демонстрацией экрана в браузере
- [Веб-дизайн, Разработка веб-сайтов, JavaScript, Программирование] Лёгкая, гибкая, производительная обёртка над Web Animations API — @okikio/animate (перевод)
- [Монетизация IT-систем, Контекстная реклама] Когортный анализ в мобильных приложениях: как понять, что экономика сходится?
Теги для поиска: #_programmirovanie (Программирование), #_dvoichnye_derevja (двоичные деревья), #_derevo (дерево), #_derevja (деревья), #_si (си), #_programmirovanie (
Программирование
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 19:23
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Как-то раз я делал задание для приёма на работу после собеседования, что-то вроде тестового задания только не на дом. Был интернет и я гуглил код на языке Си и нашел какой-то код который содержал ошибки, из-за этого я не смог сделать задание на которое выделили час. Почему так случилось скажу лишь то, что по программированию у меня было все плохо по минимуму и своего кода для деревьев у меня не было и для графов тоже.И так приступим с основ:Двои́чное де́рево — иерархическая структура данных, в которой каждый узел имеет не более двух потомков (детей). Как правило, первый называется родительским узлом, а дети называются левым и правым наследниками. Двоичное дерево не является упорядоченным ориентированным деревом.[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 =========== Похожие новости:
Программирование ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 19:23
Часовой пояс: UTC + 5