*Cамый лучший способ сказать "спасибо" - поставить лайк и и поделиться уроком с друзьями. Это очень мотивирует создавать полезные уроки =)*
@zaramar82506 жыл бұрын
Ждем программной реализации)
@musaxudiyev77545 жыл бұрын
Спасибо большое за такие уроки!
@ДмитрийСолярис-п9ц2 жыл бұрын
Какие минусы бинарного дерева?
@IT-es9yl Жыл бұрын
Читал несколько методических пособий, но смысл и преимущества бинарного дерева дошли до меня только после просмотра данного видеоурока. Спасибо!
@IIIA_KO3 жыл бұрын
Единственный канал где понятно объясняется программирование
@Гриша1-д5о6 жыл бұрын
вот бы сделать отдельный стрим по дереву с подробным объяснением , было бы очень полезно начинающим, и еще я бы хотел разобраться как балансировку делать)))Спасибо большое за труды, Сергей))
@martinsnarogs75304 жыл бұрын
Кому интересно, вот реализация бинарного дерева #include #include using namespace std; struct Tree { Tree *left; Tree *right; int num; Tree(int n = 0, Tree* l = nullptr, Tree* r = nullptr) :num(n), left(l), right(r) {} // Конструктор принимает данные, и указатель на левый и правый элемент, по умолчанию инициализируя их нулями. Далее конструктор передает эти значения дальше через двоеточие }; class BTree { Tree *root; public: BTree() { root = nullptr; } ~BTree() { Tree *temp = root; int rootValue = root->num; Tree *previous = root; while (temp != nullptr && rootValue == temp->num ) { if (root->left==nullptr && root->right==nullptr) { if (previous->left != nullptr && previous->left->num == root->num) { previous->left = nullptr; } else if (previous->right !=nullptr && previous->right->num == root->num) { previous->right = nullptr; } delete root; root = temp; } else if (root->left != nullptr && root->left->num < root->num) { previous = root; root = root->left; } else { previous = root; root = root->right; }}} void add(Tree *&t, int n) { if (t == nullptr) { t = new Tree(n); } else { if (n < t->num) { //cout left, n); } else { add(t->right, n); //cout left); cout num right); } //else cout
@mikekras76463 жыл бұрын
Скажи что делает функция inorder?
@Куся-ч9я3 жыл бұрын
Подтолкнул на правильную мысль. Реализовал чуть иначе, но принцип тот же. Спасибо
@phello572 жыл бұрын
Огромное спасибо от моей нервной системы за наглядную визуализацию проговариваемых слов в фотошопе. Все три видео на одном дыхании
@БогданаДана-у4р4 жыл бұрын
Большое спасибо за Ваш труд! Вы делаете нас умнее)
@IrinaBod4 ай бұрын
Спасибо большое!!! Сейчас я на курсах в школе программирования и как раз тема бинарных деревьев! Ваше видео поможет!
@Kobzarko6 жыл бұрын
Большое спасибо за ваш труд! Очень нужно реализация бинарного дерева в вашем исполнении!
До этого я и не знал зачем нужны бинарные деревья спасибо, что пояснил!
@MatamuneDT2 жыл бұрын
Большое спасибо. Очень наглядно просто и понятно объяснили!
@pashudzu8 ай бұрын
Очень понятное объяснение, спасибо, респект автору🎉
@dimasavukov62306 жыл бұрын
Сергей !!! спасибо за видео !!! У Вас талант -- объяснять не необъяснимые вещи !!!!!
@gevorgpirenyan35304 ай бұрын
Очень хорошо объяснено. Спасибо большое!
@gadjik_youtube2 жыл бұрын
спасибо , стало понятно ! смотрел обход дерева на другом канале , там не уточняли , что бинарное дерево заполняется по правилам, было не понятно для чего оно вообще нужно !
@andrews_lerk4 жыл бұрын
Просто максимально полезный поток информации)) Спасибо!! Однозначно лайк, подписка!)
@WEBSTART-LIVE3 жыл бұрын
Коротко и ёмко! Пока пил кофе, разобрался в том, что другие по часу жуют в своих видео и не могут донести
@Ermine8826 жыл бұрын
Спасибо за урок.
@НикитаЛевченко-с3ч3 жыл бұрын
Прекрасное изложение материала. Спасибо!
@HerrHoldem6 жыл бұрын
Очень крутые и полезные видео, спасибо!
@vladalu97946 жыл бұрын
Большое спасибо за урок, вот бы еще реализацию увидеть)))
@ilikecola3782 жыл бұрын
В фотошопе 😀
@C2H5OHH3 жыл бұрын
Спасибо за урок!
@KMkmkmkmkm-z7y Жыл бұрын
Еще б немного математики сюда) Расчет сложности поиска элемента например… Где-нибудь в конце, чтоб не пугать большинство)
@nomilious80933 жыл бұрын
Спасибо за вашу работу!!)
@ДжонСноу-е1б3 жыл бұрын
Эх, помню писал бинарный поиск. Хорошая практика! public int BinarySearch(int[] arr, int _item) { int _low = 0; //первый элемент массива для пойска int _high = arr.Length - 1; //последний элемент массива для пойска while (_low _item) // если много { _high = _mid - 1; // идем к найменьшему элементу } else // если мало { _low = _mid + 1; // идем к найбольшему элементу } } return 0; // если элемент не найдент, то возвращаем 0 }
@georgyshilin77214 жыл бұрын
Спасибо, очень доступно объясняете
@ayxanzeynalov5483 Жыл бұрын
Отличное видео , именно у вас всегда всё понятно. Очень жаль что видео больше не появляются,я бы поддержал канал финансово если б мог (
@evgenykonovalov48703 жыл бұрын
Топ! выучил плюса на ютубе! ты бог
@KurpatovInstagram6 жыл бұрын
Cпасибо!
@SM-uv1rr4 жыл бұрын
Отличное объяснение. Спасибо.
@ivansherbinin27356 жыл бұрын
Спасибо за урок
@ПетровичФёдор-р1ъ5 жыл бұрын
Очень подробно и доходчиво, спасибо!
@nata45187 ай бұрын
Спасибо большое!
@АлексейМелентьев-ч3в3 жыл бұрын
Очень круто!
@hollowflk Жыл бұрын
Просто и понятно😄
@ImVarlamov8 ай бұрын
Благодарю!
@overdoses17946 жыл бұрын
спасибо!
@feewre6 жыл бұрын
Удаление узла из бинарного дерева поиска. Не благодарите Нерекурсивная реализация Для удаления узла из бинарного дерева поиска нужно рассмотреть три возможные ситуации. Если у узла нет дочерних узлов, то у его родителя нужно просто заменить указатель на null. Если у узла есть только один дочерний узел, то нужно создать новую связь между родителем удаляемого узла и его дочерним узлом. Наконец, если у узла два дочерних узла, то нужно найти следующий за ним элемент (у этого элемента не будет левого потомка), его правого потомка подвесить на место найденного элемента, а удаляемый узел заменить найденным узлом. Таким образом, свойство бинарного дерева поиска не будет нарушено. Данная реализация удаления не увеличивает высоту дерева. Рекурсивная реализация При рекурсивном удалении узла из бинарного дерева нужно рассмотреть три случая: удаляемый элемент находится в левом поддереве текущего поддерева, удаляемый элемент находится в правом поддереве или удаляемый элемент находится в корне. В двух первых случаях нужно рекурсивно удалить элемент из нужного поддерева. Если удаляемый элемент находится в корне текущего поддерева и имеет два дочерних узла, то нужно заменить его минимальным элементом из правого поддерева и рекурсивно удалить этот минимальный элемент из правого поддерева. Иначе, если удаляемый элемент имеет один дочерний узел, нужно заменить его потомком
@sorokousov4 жыл бұрын
Это самая интересная часть)
@aliakseikatsar58152 жыл бұрын
Огромное спасибо!
@AndriiStreange4 жыл бұрын
Настолько подробно объяснил , что мне аж интересно стало откуда ты брал инфу били же сам составлял текст для объяснений ?
@tesohi9 ай бұрын
огрооооомное спасибо
@Orange_999Ай бұрын
Спасибо.
@АлександрНазаров-ш7н6 жыл бұрын
6:23 На самом деле очень даже можем . если создадим в двусвязном списке ссылку на средний элемент тогда то сможем отталкиваться от него и двигаться либо в сторону начала , или в сторону конца(как вариант))
@ramazanisaev465 жыл бұрын
можно еще , используя размер и индекс .
@alexandrsargsyan22022 жыл бұрын
bratan ogromnoe spasibo ))
@MrCraick04 жыл бұрын
Вы ошиблись по поводу словоря в c#. У него под капотом не дерево, а хэш таблица и доступ по ключу у хэш таблицы всегда o(1). А у бинарного дерева в среднем о(lgn) и в худщем o(N), если мы почитаем документацию по словарю увидим, что чтение из словаря в c# занимает o(1)
@НиколайОвчинников-д6э3 жыл бұрын
крутая вещь, это бинарное дерево
@brenkovd3 жыл бұрын
Сижу я такой смотрю про двусвязные списки и димаю , а почему бы не организовать структуру .. ( и такой в голове придумываю нечто похожее на бинарное дерево) . Открываю следующее видео и .. а ну да , точно)) Кстати эти все структуры данных описаны в книге Дональда Кнута 1 том, но как хорошо описаны я не знаю так как без математической подготовки я просто пока - что открываю книгу и просто нюхаю))) Но там описание не привязано к конкретному языку программирования , так что очень полезно
@BloodVesselTM4 жыл бұрын
Продвигаем в топы
@ЖадыраШыныбаева3 жыл бұрын
Спасибо !
@nikitun852 жыл бұрын
7:00 вот тут было бы неплохо, может быть, забежать вперед и рассказать, как в такое дерево добавлялось бы, например, число 2. Когда есть узел со значением 1 и из него уже выходит дочерний узел со значением 30. Это можно сделать, не переписывая дерево?
@unukhtv7196 Жыл бұрын
так двойка просто запишется с левой части от 30
@pandalove67954 жыл бұрын
Еще круто что слева находиться минимальное число, а справа максимальное
@andrey65522 жыл бұрын
Спасибо :)
@Yurii-b4k7 ай бұрын
Нужно уточнение, что это бинарное дерево поиска :D
@hedgehoginthefog38966 жыл бұрын
Доброго времени суток! Спасибо за качественные уроки! В одном из первых ваших видео Вы говорили, что также планируете делать уроки по C#. Хотелось бы узнать когда их ждать?
@ouma452 жыл бұрын
Пора
@lizenox2 жыл бұрын
рора
@chuuhan12 жыл бұрын
Бро, 3 года начались уроки по c#, бужу тебя, вдруг ты пропустил
@smrsgv6 жыл бұрын
великолепно!
@outcast-cr5yy6 жыл бұрын
Спасибо
@andrewv81406 жыл бұрын
А что если на вход подается ряд значений, уже отсортированный по возрастанию/убыванию, все элементы будут уходить каждый раз в правую/левую ветку? Как тогда быть с идеально сбалансированными бинарными деревьями?
@o_o22913 жыл бұрын
Можно сделать проверку на количество символов, разделить на 2 и брать корнем элемент под данным индексом
@immickful2 жыл бұрын
Для того, чтобы формально была понятна разница м/у связанными списками и бин. деревьями надо бы указывать сложности для тех и других. А так, это "лучше и быстрее" плохо осязаемо же.
@Tyr4noBuba2 жыл бұрын
Все и так понятно..
@mykhailomorhal21816 жыл бұрын
Спасибо)
@borisshalabanov46206 жыл бұрын
Спасибо, а будет урок по реализации дерева?)
@mishalavik45954 жыл бұрын
public class BinaryTree { public int Value; public BinaryTree Left; public BinaryTree Right; public BinaryTree(int value) { Value = value; } public void Add(int value) { if (value < Value) { if (Left == null) Left = new BinaryTree(value); else Left.Add(value); } else { if (Right == null) Right = new BinaryTree(value); else Right.Add(value); } } } // Как-то так, дальше сам додумывай
@bocik28544 жыл бұрын
@@mishalavik4595 Спасибо!!!))
@quadroninja27083 жыл бұрын
Вроде же рассказали
@vladsn.21193 жыл бұрын
@@mishalavik4595 Рекурсивная реализация?
@timur28872 жыл бұрын
А как происходит построение дерева?
@ANTONY-vk3pu2 жыл бұрын
А можно реализацию на c#?
@pigsel25092 жыл бұрын
СПАСИБО)) Можно реализацию на с++?
@АртёмБахарев-б4у6 жыл бұрын
Сергей, спасибо за урок! Есть в планах делать уроки по формам и оконным приложениям в Visual Studio?
@SimpleCodeIT6 жыл бұрын
есть winforms и wpf
@АртёмБахарев-б4у6 жыл бұрын
Winforms)
@jangiryanarsen49526 жыл бұрын
Продолжайте C++ и его теорию
@Mike-hp3fh4 жыл бұрын
6:15 >> Поиск по индексу будет проходить очень медленно, и нам никак не обойти ... Можно обойти - нужно хранить в узле дерева количество всех дочерних узлов.
@ДмитрийСидоров-й8и2 жыл бұрын
Здравствуйте а для python бинарное дерево также создается?
@NofaceAndrew7 ай бұрын
Разве мапы и ассоциативные массивы не используют хэш-таблицы и хэш-сеты?
@ПавелКузнецов-ш2б5 жыл бұрын
крутое видео
@artemivanov21416 жыл бұрын
Это вы объясняете про бинарное дерево поиска, в просто бинарном дереве данные не упорядочены
@delalen80124 жыл бұрын
Это точно так? Уверены?
@Dungeon_masster2284 жыл бұрын
Насколько я понял по механике бинарного дерева, оно просто не может быть неупорядоченным, т.к. упорядочение происходит прямо в процессе создания бинарного дерева
@bogotoff4 жыл бұрын
@@Dungeon_masster228 Бинарное дерево может быть не упорядоченным. Более того, в дереве могут быть не только числа, но и объекты любого типа. Главное условие бинарного дерева - каждый узел содержит не более двух потомков. Не более. А упорядочивание, балансирование(см. красно-черные деревья) это разновидность обычного бинарного дерева
@АнтонХоружий-и2э4 жыл бұрын
@@bogotoff Тимур прав
@logionthecreator8644 жыл бұрын
смотри, ты можешь делать его неупорядоченным, если будешь рандомно класть элементы в дерево, но если ты создашь какой либо принцип вставки элемента в дерево(ну в основном как в видео), то ты сможешь быстро складывать элементы в дерево и быстро вынимать, что по должно быть само собой разумеющееся , иначе это трата ресурсов (ну рандомно кидать элементы) , которое ни к чему не приводит( брать элементы хз как)
@alexantro19462 жыл бұрын
чел помог
@adiletastana27816 жыл бұрын
А как быть с удалением данных из дерева? Надеюсь будет дополнение к видео
@justr43905 жыл бұрын
Дерево будет сортироваться заново
@rasrabotchik2 жыл бұрын
для чего оно нужно?
@AShahabov4 жыл бұрын
Сделайте такое же видео по "Би-дерево".
@hecfi94613 жыл бұрын
Понятное о непонятном.
@gromitwoll69073 жыл бұрын
Что делать если список начинается с единицы ?
@ФедорКузнецов-е9у5 жыл бұрын
А как происходит удаление элементов?
@gsh1372 жыл бұрын
это конечно замечательно, но жаль не рассказано как добавлять, если это какое то промежуточное значение (47 например)
@fiendgrin11 ай бұрын
оно будет с правой стороны 46, нет никаких промежуточных значений
@vladislavjukov57642 жыл бұрын
Спасибо за урок! Но есть вопрос) А как дерево поведет себя при вставке одинаковых чисел (дубликатов)?
@inf8882 жыл бұрын
В таком случае можно сделать счетчик повторяющихся элементов, но вообще со стандартной реализацией повторяющиеся элементы в большинстве случаев будут попадать правее от себе подобного числа (но в теории могут быть и под ними, то есть изначально зайти в правую ветку от него, но потом свернуть влево), которое добавлялось раньше
@pelevin_idi_nahui4 жыл бұрын
Привет от учеников 21й школы !
@kaynsolo6 жыл бұрын
Like!
@r_lonef2 жыл бұрын
який же кайф коли музики на фоні нема, не відволікає увагу, дякую!
@ДмитрийНеизвестный-е4х3 жыл бұрын
Дикшенери в шарпе - не дерево, а хэш таблица, если не ошибаюсью
@SimpleCodeIT3 жыл бұрын
угу
@MsT0mahawk2 жыл бұрын
Верно.
@Mike-hp3fh4 жыл бұрын
9:33 Бинарный поиск в связном списке? Это возможно?
@aznaurataev94974 жыл бұрын
Это возможно в любой отсортированной коллекции.
@Mike-hp3fh4 жыл бұрын
@@aznaurataev9497 только если возможно получить элемент по индексу за время O(1)
@aznaurataev94974 жыл бұрын
@@Mike-hp3fh в плюсах бинарный поиск - это функция работающая с итераторами, ей все равно за сколько есть возможность получить Эл-т, если она есть. Другое дело если мы говорим о её скорости работы. Но факт есть факт и бин поиск на листе запустить можно.
@bandirdana-11443 жыл бұрын
А почему 50
@AdCoder6 жыл бұрын
Вопрос: на работе программисту обязательно знать наизусть что и как писать код , чтобы решить ту или иную задачу ? Ну допустим он понимает как это работает и у него есть под рукой готовый для решения данной задачи код ... его же работодатель за это никак занижать не будет ?
@Igor_Morozov6 жыл бұрын
GameStudio Вы искренно верите, что работодатель будет ковыряются в вашем коде? ))) А в общем, для этого и существуют либы, паттерны, ну и копипаст ). Просто без понимания вы не сможете их применить и будете изобретать велосипед. А изобретательство велосипедов оно такое. Часто даже затягивает, как правило во вред результату. )
@ДмитрийСолярис-п9ц2 жыл бұрын
Какие минусы бинарного дерева?
@ilyasabutalibli80862 жыл бұрын
у меня вопрос : мы же можем под 49 слева указать 30 также
@fiendgrin11 ай бұрын
нет не можем 30 меньше 45
@nika71492 жыл бұрын
А если в корне - 50, а оба последующих числа - меньше 50ти?
@melonystalker37142 жыл бұрын
Будет перекос в одну сторону
@mlpython10892 жыл бұрын
Т.е. это аналогия дерева решений в машинном обучении.
@bossmusa90754 жыл бұрын
и когда юзать бинарное дерево, а когда список?
@axentfly89456 жыл бұрын
А если в примере к головному числу 50 добавить 50, то что??
@KiberDoktoR4 жыл бұрын
Зависит от реализации. В эталоне - элемент не вставляется как в множестве (сете). Либо вставляется слева как в мультисете.
@trixion742 жыл бұрын
@@KiberDoktoR а что на счет добавления в места, которые уже заняты (к примеру, если попробовать добавить число 52 на моменте 7:25 , то что-то не складывается)
@-vd2gk Жыл бұрын
А если число повторяется?
@Kalin_cheetah Жыл бұрын
В бинарном дереве все числа-ключи уникальны
@ВсеволодЗорин-л6н6 жыл бұрын
а если добавить номер 50, к примеру, с которого уже началось дерево?... а с удалением как дела обстоят?
@axentfly89456 жыл бұрын
Сам думал на эту тему. Оказалось просто, при реализации дерева можно прописывать условия типа >= или = число 50 попадет вправо, а если
@ГеннадийСамойлов-с4ю4 жыл бұрын
@@axentfly8945 я видал делали так: < в левую часть > в правую часть == игнорировали число
@bossmusa90754 жыл бұрын
11:05
@Виталий-щ6ь6о6 жыл бұрын
было бы хорошо если б вы привели пример ипользования бинарного дерева, так как к примеру если добавлять данные по мере роста или убыванию их значения, тогда получится тот же односвязный список
@SimpleCodeIT6 жыл бұрын
Примет скоро будет в уроках по STL.
@MsT0mahawk2 жыл бұрын
Все правильно. И скорость поиска в таком случае будет одинаковая (по сравнению с односвязанным списком). К сожалению не раскрыта тема балансировки и удаления.
@errorgrisha5 жыл бұрын
Сложность доступа я так понимаю log(N)?
@Alh450114 жыл бұрын
да
@KiberDoktoR4 жыл бұрын
Для сбалансированного дерева. Для худшего случая дерева это - n.