Тёмный

Бинарное дерево. Полное понимание! Динамические структуры данных #3 

#SimpleCode
Подписаться 368 тыс.
Просмотров 225 тыс.
50% 1

Однонаправленныйсписок #1
goo.gl/JbKZgi
Двунаправленный список#2
goo.gl/j6A6HJ
✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅
Если вам нравятся мои уроки, вы хотите поддержать меня и развитие канала, то можете сделать это тут!=)
🔴🔴🔴 www.donationalerts.ru/r/simple...
или тут
🔴🔴🔴 / simplecode
✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅
Уроки по программированию
Наша группа ВК smplcode
Подписывайтесь на канал / @simplecodeit

Опубликовано:

 

3 фев 2018

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 173   
@SimpleCodeIT
@SimpleCodeIT 6 лет назад
*Cамый лучший способ сказать "спасибо" - поставить лайк и и поделиться уроком с друзьями. Это очень мотивирует создавать полезные уроки =)*
@zaramar8250
@zaramar8250 6 лет назад
Ждем программной реализации)
@musaxudiyev7754
@musaxudiyev7754 4 года назад
Спасибо большое за такие уроки!
@user-bx8kz9lo8o
@user-bx8kz9lo8o 2 года назад
Какие минусы бинарного дерева?
@user-nz3ig3wv5j
@user-nz3ig3wv5j 3 года назад
Большое спасибо за Ваш труд! Вы делаете нас умнее)
@dimasavukov6230
@dimasavukov6230 5 лет назад
Сергей !!! спасибо за видео !!! У Вас талант -- объяснять не необъяснимые вещи !!!!!
@HerrHoldem
@HerrHoldem 6 лет назад
Очень крутые и полезные видео, спасибо!
@user-ij3hx7qp4i
@user-ij3hx7qp4i 3 года назад
Прекрасное изложение материала. Спасибо!
@Kobzarko
@Kobzarko 5 лет назад
Большое спасибо за ваш труд! Очень нужно реализация бинарного дерева в вашем исполнении!
@IIIA_KO
@IIIA_KO 2 года назад
Единственный канал где понятно объясняется программирование
@andrews_lerk
@andrews_lerk 3 года назад
Просто максимально полезный поток информации)) Спасибо!! Однозначно лайк, подписка!)
@antonpashkevich5061
@antonpashkevich5061 3 года назад
Красавчик :3 Как легко и понятно объясняешь
@MatamuneDT
@MatamuneDT Год назад
Большое спасибо. Очень наглядно просто и понятно объяснили!
@nomilious8093
@nomilious8093 3 года назад
Спасибо за вашу работу!!)
@IT-es9yl
@IT-es9yl Год назад
Читал несколько методических пособий, но смысл и преимущества бинарного дерева дошли до меня только после просмотра данного видеоурока. Спасибо!
@user-rc2vh9iy6i
@user-rc2vh9iy6i 4 года назад
Очень подробно и доходчиво, спасибо!
@Ermine882
@Ermine882 6 лет назад
Спасибо за урок.
@georgyshilin7721
@georgyshilin7721 4 года назад
Спасибо, очень доступно объясняете
@user-sh5ku6hz7f
@user-sh5ku6hz7f 5 лет назад
вот бы сделать отдельный стрим по дереву с подробным объяснением , было бы очень полезно начинающим, и еще я бы хотел разобраться как балансировку делать)))Спасибо большое за труды, Сергей))
@Roman-yg8yt
@Roman-yg8yt 4 года назад
Как всегда, максимально понятно
@SM-uv1rr
@SM-uv1rr 4 года назад
Отличное объяснение. Спасибо.
@NikolayForostiy
@NikolayForostiy 5 лет назад
До этого я и не знал зачем нужны бинарные деревья спасибо, что пояснил!
@C2H5OHH
@C2H5OHH 2 года назад
Спасибо за урок!
@phello57
@phello57 Год назад
Огромное спасибо от моей нервной системы за наглядную визуализацию проговариваемых слов в фотошопе. Все три видео на одном дыхании
@ivansherbinin2735
@ivansherbinin2735 6 лет назад
Спасибо за урок
@akupreychuk6893
@akupreychuk6893 6 месяцев назад
благодарю, максимально понятное объяснение
@pashudzu
@pashudzu 2 месяца назад
Очень понятное объяснение, спасибо, респект автору🎉
@user-mn2po8ns2z
@user-mn2po8ns2z 3 года назад
Очень круто!
@KurpatovInstagram
@KurpatovInstagram 6 лет назад
Cпасибо!
@nata4518
@nata4518 2 месяца назад
Спасибо большое!
@aliakseikatsar5815
@aliakseikatsar5815 2 года назад
Огромное спасибо!
@evgenykonovalov4870
@evgenykonovalov4870 2 года назад
Топ! выучил плюса на ютубе! ты бог
@ImVarlamov
@ImVarlamov 2 месяца назад
Благодарю!
@overdoses1794
@overdoses1794 6 лет назад
спасибо!
@gadjik_youtube
@gadjik_youtube Год назад
спасибо , стало понятно ! смотрел обход дерева на другом канале , там не уточняли , что бинарное дерево заполняется по правилам, было не понятно для чего оно вообще нужно !
@vladalu9794
@vladalu9794 6 лет назад
Большое спасибо за урок, вот бы еще реализацию увидеть)))
@ilikecola378
@ilikecola378 2 года назад
В фотошопе 😀
@SimpleCodeIT
@SimpleCodeIT 6 лет назад
#бинарноедерево #динамическиеструктурыданных #SimpleCode #урокипрограммирования
@hollowflk
@hollowflk Год назад
Просто и понятно😄
@smrsgv
@smrsgv 5 лет назад
великолепно!
@ayxanzeynalov5483
@ayxanzeynalov5483 Год назад
Отличное видео , именно у вас всегда всё понятно. Очень жаль что видео больше не появляются,я бы поддержал канал финансово если б мог (
@user-nx5gg7ys7f
@user-nx5gg7ys7f 8 месяцев назад
Спасибо)
@tesohi
@tesohi 3 месяца назад
огрооооомное спасибо
@user-gp1qf7tp4r
@user-gp1qf7tp4r 3 года назад
Спасибо !
@alexandrsargsyan2202
@alexandrsargsyan2202 2 года назад
bratan ogromnoe spasibo ))
@outcast-cr5yy
@outcast-cr5yy 6 лет назад
Спасибо
@martinsnarogs7530
@martinsnarogs7530 4 года назад
Кому интересно, вот реализация бинарного дерева #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
@mikekras7646
@mikekras7646 3 года назад
Скажи что делает функция inorder?
@user-yn7gi6os8d
@user-yn7gi6os8d 2 года назад
Подтолкнул на правильную мысль. Реализовал чуть иначе, но принцип тот же. Спасибо
@andrey6552
@andrey6552 2 года назад
Спасибо :)
@WEBSTART-LIVE
@WEBSTART-LIVE 2 года назад
Коротко и ёмко! Пока пил кофе, разобрался в том, что другие по часу жуют в своих видео и не могут донести
@BloodVesselTM
@BloodVesselTM 4 года назад
Продвигаем в топы
@user-pg1ed3jw1p
@user-pg1ed3jw1p 3 года назад
Настолько подробно объяснил , что мне аж интересно стало откуда ты брал инфу били же сам составлял текст для объяснений ?
@DD0S2
@DD0S2 3 года назад
спасибо
@user-yj3mi9em7y
@user-yj3mi9em7y 5 лет назад
крутое видео
@user-rm3ed2lq9d
@user-rm3ed2lq9d 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 }
@jangiryanarsen4952
@jangiryanarsen4952 6 лет назад
Продолжайте C++ и его теорию
@MrCraick0
@MrCraick0 4 года назад
Вы ошиблись по поводу словоря в c#. У него под капотом не дерево, а хэш таблица и доступ по ключу у хэш таблицы всегда o(1). А у бинарного дерева в среднем о(lgn) и в худщем o(N), если мы почитаем документацию по словарю увидим, что чтение из словаря в c# занимает o(1)
@user-tr6mf1ps5n
@user-tr6mf1ps5n 2 года назад
крутая вещь, это бинарное дерево
@hedgehoginthefog3896
@hedgehoginthefog3896 6 лет назад
Доброго времени суток! Спасибо за качественные уроки! В одном из первых ваших видео Вы говорили, что также планируете делать уроки по C#. Хотелось бы узнать когда их ждать?
@ouma45
@ouma45 2 года назад
Пора
@lizenox
@lizenox 2 года назад
рора
@gedemin7420
@gedemin7420 2 года назад
Бро, 3 года начались уроки по c#, бужу тебя, вдруг ты пропустил
@user-ot8fy6ow4f
@user-ot8fy6ow4f 4 года назад
thank from in Kazahstan
@pandalove6795
@pandalove6795 4 года назад
Еще круто что слева находиться минимальное число, а справа максимальное
@kaynsolo
@kaynsolo 6 лет назад
Like!
@user-ct9oj1es2t
@user-ct9oj1es2t 5 лет назад
6:23 На самом деле очень даже можем . если создадим в двусвязном списке ссылку на средний элемент тогда то сможем отталкиваться от него и двигаться либо в сторону начала , или в сторону конца(как вариант))
@ramazanisaev46
@ramazanisaev46 5 лет назад
можно еще , используя размер и индекс .
@feewre
@feewre 5 лет назад
Удаление узла из бинарного дерева поиска. Не благодарите Нерекурсивная реализация Для удаления узла из бинарного дерева поиска нужно рассмотреть три возможные ситуации. Если у узла нет дочерних узлов, то у его родителя нужно просто заменить указатель на null. Если у узла есть только один дочерний узел, то нужно создать новую связь между родителем удаляемого узла и его дочерним узлом. Наконец, если у узла два дочерних узла, то нужно найти следующий за ним элемент (у этого элемента не будет левого потомка), его правого потомка подвесить на место найденного элемента, а удаляемый узел заменить найденным узлом. Таким образом, свойство бинарного дерева поиска не будет нарушено. Данная реализация удаления не увеличивает высоту дерева. Рекурсивная реализация При рекурсивном удалении узла из бинарного дерева нужно рассмотреть три случая: удаляемый элемент находится в левом поддереве текущего поддерева, удаляемый элемент находится в правом поддереве или удаляемый элемент находится в корне. В двух первых случаях нужно рекурсивно удалить элемент из нужного поддерева. Если удаляемый элемент находится в корне текущего поддерева и имеет два дочерних узла, то нужно заменить его минимальным элементом из правого поддерева и рекурсивно удалить этот минимальный элемент из правого поддерева. Иначе, если удаляемый элемент имеет один дочерний узел, нужно заменить его потомком
@sorokousov
@sorokousov 3 года назад
Это самая интересная часть)
@AShahabov
@AShahabov 4 года назад
Сделайте такое же видео по "Би-дерево".
@r_lonef
@r_lonef Год назад
який же кайф коли музики на фоні нема, не відволікає увагу, дякую!
@alexantro1946
@alexantro1946 2 года назад
чел помог
@pigsel2509
@pigsel2509 Год назад
СПАСИБО)) Можно реализацию на с++?
@andrewv8140
@andrewv8140 6 лет назад
А что если на вход подается ряд значений, уже отсортированный по возрастанию/убыванию, все элементы будут уходить каждый раз в правую/левую ветку? Как тогда быть с идеально сбалансированными бинарными деревьями?
@o_o2291
@o_o2291 3 года назад
Можно сделать проверку на количество символов, разделить на 2 и брать корнем элемент под данным индексом
@brenkovd
@brenkovd 2 года назад
Сижу я такой смотрю про двусвязные списки и димаю , а почему бы не организовать структуру .. ( и такой в голове придумываю нечто похожее на бинарное дерево) . Открываю следующее видео и .. а ну да , точно)) Кстати эти все структуры данных описаны в книге Дональда Кнута 1 том, но как хорошо описаны я не знаю так как без математической подготовки я просто пока - что открываю книгу и просто нюхаю))) Но там описание не привязано к конкретному языку программирования , так что очень полезно
@user-kf5bl1ny3m
@user-kf5bl1ny3m 6 лет назад
Сергей, спасибо за урок! Есть в планах делать уроки по формам и оконным приложениям в Visual Studio?
@SimpleCodeIT
@SimpleCodeIT 6 лет назад
есть winforms и wpf
@user-kf5bl1ny3m
@user-kf5bl1ny3m 6 лет назад
Winforms)
@hecfi9461
@hecfi9461 3 года назад
Понятное о непонятном.
@nikitun85
@nikitun85 Год назад
7:00 вот тут было бы неплохо, может быть, забежать вперед и рассказать, как в такое дерево добавлялось бы, например, число 2. Когда есть узел со значением 1 и из него уже выходит дочерний узел со значением 30. Это можно сделать, не переписывая дерево?
@unukhtv7196
@unukhtv7196 Год назад
так двойка просто запишется с левой части от 30
@immickful
@immickful Год назад
Для того, чтобы формально была понятна разница м/у связанными списками и бин. деревьями надо бы указывать сложности для тех и других. А так, это "лучше и быстрее" плохо осязаемо же.
@Tyr4noBuba
@Tyr4noBuba Год назад
Все и так понятно..
@user-nw7eb3rb9y
@user-nw7eb3rb9y 4 года назад
А как происходит удаление элементов?
@user-mt6wt9vc1x
@user-mt6wt9vc1x Месяц назад
Нужно уточнение, что это бинарное дерево поиска :D
@adiletastana2781
@adiletastana2781 5 лет назад
А как быть с удалением данных из дерева? Надеюсь будет дополнение к видео
@justr4390
@justr4390 5 лет назад
Дерево будет сортироваться заново
@timur2887
@timur2887 Год назад
А как происходит построение дерева?
@ANTONY-vk3pu
@ANTONY-vk3pu 2 года назад
А можно реализацию на c#?
@artemivanov2141
@artemivanov2141 6 лет назад
Это вы объясняете про бинарное дерево поиска, в просто бинарном дереве данные не упорядочены
@user-ck1vp7fp9l
@user-ck1vp7fp9l Год назад
Здравствуйте а для python бинарное дерево также создается?
@AdCoder
@AdCoder 6 лет назад
Вопрос: на работе программисту обязательно знать наизусть что и как писать код , чтобы решить ту или иную задачу ? Ну допустим он понимает как это работает и у него есть под рукой готовый для решения данной задачи код ... его же работодатель за это никак занижать не будет ?
@Igor_Morozov
@Igor_Morozov 6 лет назад
GameStudio Вы искренно верите, что работодатель будет ковыряются в вашем коде? ))) А в общем, для этого и существуют либы, паттерны, ну и копипаст ). Просто без понимания вы не сможете их применить и будете изобретать велосипед. А изобретательство велосипедов оно такое. Часто даже затягивает, как правило во вред результату. )
@user-bx8kz9lo8o
@user-bx8kz9lo8o 2 года назад
Какие минусы бинарного дерева?
@gromitwoll6907
@gromitwoll6907 2 года назад
Что делать если список начинается с единицы ?
@borisshalabanov4620
@borisshalabanov4620 6 лет назад
Спасибо, а будет урок по реализации дерева?)
@mishalavik4595
@mishalavik4595 3 года назад
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); } } } // Как-то так, дальше сам додумывай
@bocik2854
@bocik2854 3 года назад
@@mishalavik4595 Спасибо!!!))
@quadroninja2708
@quadroninja2708 2 года назад
Вроде же рассказали
@vladsn.2119
@vladsn.2119 2 года назад
@@mishalavik4595 Рекурсивная реализация?
@Mike-hp3fh
@Mike-hp3fh 4 года назад
6:15 >> Поиск по индексу будет проходить очень медленно, и нам никак не обойти ... Можно обойти - нужно хранить в узле дерева количество всех дочерних узлов.
@bossmusa9075
@bossmusa9075 3 года назад
11:05
@rasrabotchik
@rasrabotchik Год назад
для чего оно нужно?
@gsh137
@gsh137 Год назад
это конечно замечательно, но жаль не рассказано как добавлять, если это какое то промежуточное значение (47 например)
@fiendgrin
@fiendgrin 6 месяцев назад
оно будет с правой стороны 46, нет никаких промежуточных значений
@user-uj8bq7go3t
@user-uj8bq7go3t 6 лет назад
было бы хорошо если б вы привели пример ипользования бинарного дерева, так как к примеру если добавлять данные по мере роста или убыванию их значения, тогда получится тот же односвязный список
@SimpleCodeIT
@SimpleCodeIT 6 лет назад
Примет скоро будет в уроках по STL.
@MsT0mahawk
@MsT0mahawk 2 года назад
Все правильно. И скорость поиска в таком случае будет одинаковая (по сравнению с односвязанным списком). К сожалению не раскрыта тема балансировки и удаления.
@mlpython1089
@mlpython1089 2 года назад
Т.е. это аналогия дерева решений в машинном обучении.
@bossmusa9075
@bossmusa9075 3 года назад
и когда юзать бинарное дерево, а когда список?
@pelevin_idi_nahui
@pelevin_idi_nahui 3 года назад
Привет от учеников 21й школы !
@bandirdana-1144
@bandirdana-1144 2 года назад
А почему 50
@daniilk4994
@daniilk4994 Год назад
Еще б немного математики сюда) Расчет сложности поиска элемента например… Где-нибудь в конце, чтоб не пугать большинство)
@NofaceAndrew
@NofaceAndrew Месяц назад
Разве мапы и ассоциативные массивы не используют хэш-таблицы и хэш-сеты?
@ilyasabutalibli8086
@ilyasabutalibli8086 2 года назад
у меня вопрос : мы же можем под 49 слева указать 30 также
@fiendgrin
@fiendgrin 6 месяцев назад
нет не можем 30 меньше 45
@arthurradiuk9503
@arthurradiuk9503 5 лет назад
Дякую
@vladislavjukov5764
@vladislavjukov5764 2 года назад
Спасибо за урок! Но есть вопрос) А как дерево поведет себя при вставке одинаковых чисел (дубликатов)?
@inf888
@inf888 2 года назад
В таком случае можно сделать счетчик повторяющихся элементов, но вообще со стандартной реализацией повторяющиеся элементы в большинстве случаев будут попадать правее от себе подобного числа (но в теории могут быть и под ними, то есть изначально зайти в правую ветку от него, но потом свернуть влево), которое добавлялось раньше
@user-gi2nb1jg2v
@user-gi2nb1jg2v 3 года назад
Дикшенери в шарпе - не дерево, а хэш таблица, если не ошибаюсью
@SimpleCodeIT
@SimpleCodeIT 3 года назад
угу
@MsT0mahawk
@MsT0mahawk 2 года назад
Верно.
@axentfly8945
@axentfly8945 5 лет назад
А если в примере к головному числу 50 добавить 50, то что??
@KiberDoktoR
@KiberDoktoR 3 года назад
Зависит от реализации. В эталоне - элемент не вставляется как в множестве (сете). Либо вставляется слева как в мультисете.
@trixion74
@trixion74 Год назад
@@KiberDoktoR а что на счет добавления в места, которые уже заняты (к примеру, если попробовать добавить число 52 на моменте 7:25 , то что-то не складывается)
@nika7149
@nika7149 2 года назад
А если в корне - 50, а оба последующих числа - меньше 50ти?
@melonystalker3714
@melonystalker3714 2 года назад
Будет перекос в одну сторону
@errorgrisha
@errorgrisha 4 года назад
Сложность доступа я так понимаю log(N)?
@Alh45011
@Alh45011 4 года назад
да
@KiberDoktoR
@KiberDoktoR 3 года назад
Для сбалансированного дерева. Для худшего случая дерева это - n.
@andrey_sautenko
@andrey_sautenko 4 месяца назад
так вот откуда у map ноги(корни) растут))
@-vd2gk
@-vd2gk 11 месяцев назад
А если число повторяется?
@Kalin_cheetah
@Kalin_cheetah 11 месяцев назад
В бинарном дереве все числа-ключи уникальны
Далее
🤘РОК или ПОП?💖
3:20:26
Просмотров 1,7 млн
Собеседование Junior C++
45:32
Просмотров 102 тыс.