Тёмный

Реализуем бинарное дерево на JavaScript; обход в глубину и в ширину 

Елена Литвинова — Искусство Веб-разработки 🛸
Просмотров 20 тыс.
50% 1

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

 

27 сен 2024

Поделиться:

Ссылка:

Скачать:

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

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 60   
@webelart
@webelart 3 года назад
Ребята, добавлю сюда опечатки монтажа, т.к. видео не хочется перезаливать из-за полученных просмотров: 1. На 15-21 минуте я руками показываю depth first search и breadth first search, текст перепутан местами. 2. В видео я не учла рефлект камеры: показываю лево, при этом руками уводя направо. Эту особенность я учла только в самом начале видео. При объяснении кода - не учла.
@МаксимИсаев-ъ5о
@МаксимИсаев-ъ5о 3 месяца назад
Мое глубочайшее почтение!
@AlexMitinPlus
@AlexMitinPlus 2 года назад
Большое спасибо за видео! Действительно очень доходчиво объяснили. Хотелось бы продолжения! В частности, интересуют такие вопросы: - применение алгоритмов и структур данных в вашей практике. В решении каких задач они помогли сделать код производительнее или понятнее? Живые случаи сами собой иллюстрируют актуальность. А то задумается какой-нибудь неуч вроде меня на тему: "ну и зачем мне это дерево, если есть массивы с функциями сортировки и поиска? Для чего нужны стек и очередь, если их опять же, можно реализовать через массив? На каких объемах данных O(n) начинает значительно отличаться от O(log n)?". - Я так до конца и не понял для чего нужны разные методы обхода в глубину. Из других источников узнал, что inOrder вернет элементы в порядке возрастания. А остальные? - Очень надеюсь однажды найти настолько же понятное объяснение тем, связанных с балансировкой дерева (сама балансировка. правые и левые повороты и т.д), а так же тонкости перестройки дерева при удалении узлов. - Хотелось бы посмотреть настолько же качественное видео о кучах.
@KingDog25
@KingDog25 2 года назад
Наверное, это лучший разбор бинарных деревьев, который видел! Хоть и с джавой не особо дружу, но почти все было понятно, интересная подача, Спасибо!
@s9219871110
@s9219871110 2 года назад
Большое спасибо за прекрасную подачу материала!
@tesohi
@tesohi 6 месяцев назад
Огромное спасибо! Качественно и полезно)
@МишаЩетинин-з5ы
@МишаЩетинин-з5ы 2 года назад
Спасибо за такое простое и понятное объяснение! Лучшие уроки в сети!!!
@andrey1998andrey4
@andrey1998andrey4 9 месяцев назад
Отличное видео! Благодаря ему наткнулся на канал 👍🏼
@ЕгорЕгорович-д2т
Розумна та вродлива ,найкраща в ютубi
@xsolagg7357
@xsolagg7357 2 года назад
Спасибо огромное , смог написать лабу только по одному твоему видео, помимо хорошей оценки и знания про бинарное дерево будут :)
@webelart
@webelart 2 года назад
❤️
@algoseekee
@algoseekee 3 года назад
Найс! Коммент в помощь продвижению 😍
@webelart
@webelart 3 года назад
Ого!!! Виктор, спасибо!! 😍
@sergeiklokov359
@sergeiklokov359 2 года назад
Спасибо Елена!
@Ramosok
@Ramosok 2 года назад
Вот то что давно искал. спасибо!
@simpsomk
@simpsomk 2 года назад
Умничка, еще бы удаление ноды рассказать :) Ждём еще видосов по структурам данных
@Диасюмор
@Диасюмор Год назад
Отличный канал, спасибо за видео
@tanercoder1915
@tanercoder1915 3 года назад
спасибо! очень доходчиво изложено.
@beknazaromuraliev5680
@beknazaromuraliev5680 2 года назад
спасибо за уроки, классно!!!!
@reginapopova3062
@reginapopova3062 9 месяцев назад
Спасибо!
@dmitrygrinevich2167
@dmitrygrinevich2167 Год назад
очень крутое видео спасибо
@dm.hol.3624
@dm.hol.3624 4 месяца назад
Пришел сюда, чтобы войти сеньором в МЯСО (русский FAANG), и не пожалел)
@still_alive02
@still_alive02 6 месяцев назад
Такой к Вам вопрос, могли бы вы порекомендовать какую то литературу по JS, каких нибудь хороших авторов, по которым можно с нуля подтянуть все до уровня хотя бы джуна и получения навыков реальной работы, какие есть варианты?
@webelart
@webelart 6 месяцев назад
Мне больше всего нравился learn.javascript.ru Лучший учебник. Там же можно либо читать на сайте либо купить 3 книги.
@deniskorablev2648
@deniskorablev2648 3 года назад
То что надо
@webelart
@webelart 3 года назад
Отлично! 🔥
@404russ
@404russ 2 года назад
Мужика тебе надо конечно...
@webelart
@webelart 2 года назад
Предложение руки и сердца? 😁я вам по чесноку скажу, код и программирование куда стабильнее и надёжнее, любого мужика! 🤪
@404russ
@404russ 2 года назад
@@webelart а пошли в дискорде поболтаем
@gromovboris
@gromovboris 3 месяца назад
если у вас нету ноды - сорян, прощайте, реторн =DD
@webelart
@webelart 3 месяца назад
Гуд бай
@svetlanazheleykina4113
@svetlanazheleykina4113 Год назад
Елена! спасибо большое за видео! Материал для меня оказался непростым, просто повторяла в VC. Как работали в Sources тоже не совсем понятно для меня. Возможно у Вас уже есть видео как работать с DevTools, надо глянуть. Если нет, то может будет актуально. В любом случае, огромное спасибо за видео, буду повторять пока не пойму.
@webelart
@webelart Год назад
Здравствуйте, Светлана. Нет, по dev tools нет пока видео. Что конкретно хотелось бы по ним узнать?
@svetlanazheleykina4113
@svetlanazheleykina4113 Год назад
@@webelart Елена, спасибо, что ответили. Хотелось бы узнать процесс использования, как дебажить код. Может быть какой-то интересный пример VS Code. Может быть пример из жизни, если Вы работали со старым кодом, legacy Ваш опыт, чем Вам помогал Dev Tools. Может просто обзор этого инструмента, фишки какие-то. Вы часто работаете и применяете console.log - в каких случаях и в какие куски кода вставлять, а потом проверяете баг, как отслеживаете ошибки по строчкам. Простите, если плохо донесла мысль. Сейчас каждый день смотрю Ваши видео и повторяю за Вами🙌
@rus1006
@rus1006 2 года назад
просто не смог не поставить лайк. Видео супер 👍👍👍. Но есть вопрос - для того чтобы найти нужное значение нужно просто ориентироваться из условия больше/меньше и спускаться по ветке вглубь пока не дойдем но нужного значения - типа метода get?
@webelart
@webelart 2 года назад
Спасибо! ❤️ Да, спускаться по веткам, в бинарном дереве все значения упорядочены и правильно разложены, поэтому поиск здесь бинарный и очень быстрый.
@AlexMitinPlus
@AlexMitinPlus 2 года назад
Еще раз хочу поблагодарить за видео. Именно с него началось мое изучение структур данных сложнее массива. Хочу, в свою очередь, поделиться другим способом организации хранения бинарного дерева. В видео представлен подход, в котором дерево хранится в виде структуры, где каждый узел - это объект, в котором хранится значение и ссылки на правого и левого потомка. Есть альтернативный подход. Бинарное дерево можно хранить в простом массиве! Подробнее сам подход описан в этом видео ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-h755jk0HIko.html Это приводит как к уменьшению потребляемой памяти, так и к упрощению некоторых методов. Например, обход в ширину (traverse BFS) сокращается до простого прохода по массиву! Я сам был ошарашен, но действительно метод обхода в ширину сократился до: traverseBFS(callback){ if(!callback || typeof callback !== 'function'){ console.warn('Неправильный тип callback'); return; } this.nodes.forEach(callback); } Кроме того, я уверен, что несколько ускоряется операции вставки, потому как нам надо ходить не по ссылкам между объектами, а работать в пределах индекса одного массива.
@arnoldinwhite8267
@arnoldinwhite8267 Год назад
10 секунд видео пропустил, подумал что за волос на экране
@webelart
@webelart Год назад
Что за волос?
@arnoldinwhite8267
@arnoldinwhite8267 Год назад
​@@webelart Когда с телефона смотрел, не понял сначала что за кадром стебель и принял за волос
@webelart
@webelart Год назад
@@arnoldinwhite8267 🤣🤣🤣 Я поняла о чём вы, да цветок у меня там супер странный.
@carry-on-chaos4032
@carry-on-chaos4032 2 года назад
Доброго времени суток! Объясните кто-нибудь, пожалуйста, зачем тут используется return без значения ?
@webelart
@webelart 2 года назад
Напишите, какая минута видео. Я тогда смогу точно понять о каком return идёт речь. Сейчас напишу ответ относительно 11:38 минуты, где в if есть return. Я использую такую технику, чтобы не писать else. Т.е. по факту если нет this.root, то нам нужно его присвоить и больше ничего делать в этой функции не нужно, поэтому выходим. Можно писать else, но тогда будет нагромождение скобочек.
@vadimburavlev4773
@vadimburavlev4773 Год назад
@@webelart if(...) return .... еще короче, слишком много лишних символов.
@webelart
@webelart Год назад
@@vadimburavlev4773 Кошмар, как жить с символами теперь...
@ЕвгенийКовальчук-й8й
Мне не очень зашло, всё быстро и поверхностно... Если будете продолжать делать контент, то пожалуйста делайте более медленно и с комментариями, а то у вас так, здесь пишем это, здесь это... Тема довольно тяжёлая, и по данному видео её даже поверхносто понять тяжело
@webelart
@webelart 3 года назад
А мне ваш комментарий не очень зашёл. Всё скомкано, не понятно, что не понятно и поверхностно. И я не шучу. Вы не задали ни единого вопроса, где именно не понятно. А просто разозлились на мой труд, ещё и обесценить попытались. К себе также относитесь? Злитесь, что мозг не сразу воспринял информацию? Программирование в целом не простая система и преподать любую его часть, чтобы каждой живой душе было понятно - уже заранее невозможно. А многие знания требуют дополнительных наслоений, таких чтобы сам мозг был готов воспринять новое. Я разобрала те вещи, которые важны и которые мне самой здорово помогли в своё время. Хотите, чтобы я к вам проявила эмпатию и помогла, то учитесь писать комментарии по существу с вопросами и с взаимным уважением, конечно.
@rus1006
@rus1006 2 года назад
тема не для новичков парень. требует пауз и обдумываний
@j-and-a-prodact
@j-and-a-prodact 5 месяцев назад
Кек, ответ автора порадовал!) Мощно и по существу) 🫡
@АлексейТ-з3ь
@АлексейТ-з3ь 2 года назад
для идеала не хватило графики-дерева с первой минуты - для визуализации перехода по узлам при последующем объяснении. А вообще круто, недавно открыл этот канал для себя, чему очень рад, спасибо ))
@pain4metoo
@pain4metoo 3 года назад
Привет, очень хороший стиль подачи. Первый раз за 7 месяцев изучения Front end искусства решил подобраться к бинарным деревья, пожалуй начну с вашего формата знакомство с этой преисподнией.
@faxriddinboltaev1984
@faxriddinboltaev1984 2 года назад
Здравствуйте Елена. очень полезный видеоурок. Ясно объяснения, позитивна подход к урока.
@artyomgrigorev2186
@artyomgrigorev2186 2 года назад
Всё супер супер супер круто😀😀
@andrewbuga5638
@andrewbuga5638 2 года назад
Круто!!! Спасибо большое!!!
@jamjam3337
@jamjam3337 Год назад
👏
@dimeliora
@dimeliora Год назад
Небольшая поправочка: в бинарном дереве условие "потомок слева меньше, чем потомок справа" не обязательно. Это требования для бинарного дерева поиска (binary search tree), подвид, получается.
@webelart
@webelart Год назад
т.е. может быть и наоборот? Не встречала кстати на оборот. Можете ссылку на документацию или источник скинуть?
@dimeliora
@dimeliora Год назад
@@webelart источник... Да любой по структурам данных, наверное. Тот же "Структуры данных и алгоритмы Java" Лафоре, там им глава посвящена. И там в качестве примера рассматривается именно BST, все оговорки и пояснения даны. Суть в том, что BST упрощает работу с коллекцией данных, если нужно часто именно искать элементы, как раз за счёт логарифмической сложности. Поэтому ставится такое дополнительное условие. Сравнили значение корня с тем, что ищем. Если искомое больше, отбросили, условно, половину дерева (всю левую часть), и так далее. Правда, нюанс - такое дерево должно быть сбалансированным. А если напихивать в него значения строго в порядке возрастания (или убывания), то такое дерево фактически выродится в связный список, с линейной сложностью поиска.
@webelart
@webelart Год назад
@@dimeliora обычно для работы с бинарными деревьями здорово предусматривать методы, в том числе и по балансировке. Спасибо, что поделились, интересно!
@dimeliora
@dimeliora Год назад
@@webelart да, есть самобалансирующиеся деревья (AVL). Как один из вариантов - Red-Black Tree, вот посмотреть на его реализацию действительно интересно) Вам спасибо 🙏
Далее
+1000 Aura For This Save! 🥵
00:19
Просмотров 7 млн
Поиск в ширину (BFS)
16:39
Просмотров 27 тыс.