Java. Деревья ч.1. Рекурсивный обход в глубину.
Вставка
- Опубліковано 13 сер 2019
- Исходный код:
github.com/Arhiser/java_tutor...
В данном видео содержится краткий обзор такой структуры данных как дерево. Говорим о том, что такое дерево, какие деревья бывают, для чего применяются и какую роль играют в информатике и программировании. Далее рассматриваем, как создать класс для представления бинарного дерева на языке программирования Java. После этого пишем и разбираем алгоритм рекурсивного обхода дерева в глубину.
Ссылки на источники и авторов иллюстраций к данному видео:
Социальный граф
ru.wikipedia.org/wiki/%D0%A1%...
Автор иллюстрации: Festys - собственная работа, CC BY-SA 3.0, commons.wikimedia.org/w/index...
Красно-черное дерево
ru.wikipedia.org/wiki/%D0%9A%...
Автор иллюстрации: Cburnett - собственная работа, CC BY-SA 3.0, commons.wikimedia.org/w/index...
B-дерево
ru.wikipedia.org/wiki/B-%D0%B...
Иллюстрация CC BY-SA 3.0, commons.wikimedia.org/w/index...
BSP-дерево
ru.wikipedia.org/wiki/%D0%94%...
Автор иллюстрации: Jkwchui - собственная работа, CC BY-SA 3.0, commons.wikimedia.org/w/index...
Октодерево
ru.wikipedia.org/wiki/%D0%9E%...
Автор иллюстрации: Nü, CC BY-SA 3.0, commons.wikimedia.org/w/index...
Префиксное дерево
ru.wikipedia.org/wiki/%D0%9F%...
Автор иллюстрации: Varvara Krayvanova - собственная работа, CC BY-SA 4.0, commons.wikimedia.org/w/index...
Поддержать канал💰:
yoomoney.ru/to/410018856244871
#ArhiTutorialsJava #ityoutubersru
Какое же простое объяснение алгоритма! Решил пересмотреть весь ваш плейлист по алгоритмам.
Забавно, вижу ваши комментарии и под лекциями в JavaRush =)
Отличное видео. Спасибо за доступное и понятное объяснение!
Мужик, ты красавчик! До этого видео пробовал читать другие ресурсы - мало что понял. А из этого видео сразу все стало ясно. Спасибо! Все таки умение объяснять доступно - очень ценный навык.
Офигеть это нечего не сказать, в универе вообще тему не понял,от слова совсем, посмотрев это видео все стало намного понятнее, Спасибо Огромное автору!
Автору ОГРОМНЫЙ респект. Очень грамотно объясняет. С предысторией, примерами и пояснениями зачем и почему. Однозначно подписка. Спасибо!
Вот правильно говорят, когда человек понимает он может доступно объяснить, спасибо за уроки!
Объяснения лучше, чем на дорогущих курсах...Спасибо Вам большое! Пошла смотреть другие Ваши ролики! Лайк
Сергей, спасибо большое. Лучшего объяснения я не видел, это большое подспорье в изучении структуры данных.
Спасибо за урок. Перевел 10₽ за объяснение. Призываю всех делать также. Нужно поддерживать хороших авторов и не скупиться. Так мы станем жить лучше!
Спасибо, получил.
Спасибо вам большое, с третьего раза все понятно стало. В общем пока сам не напишешь не подебажишь не разберешься
Спасибо большое! Очень помогли решить такую задачу! Вы единственный кто хорошо объясняет Java! Я вам очень благодарен!
тема интересная, очень нравится как вы все детально объясняете. Спасибо)
Очень четкое и понятное обьяснение без лишней воды. Спасибо за науку.
Всё наглядно и понятно! Спасибо за видео! Надеюсь на продолжение темы.:)
Комметрарий в поддержку.
По сути: Хотелось бы уроки и по другим базовым алгоритмам. Особенно по тем, что дают на тестах в Leetcode и Codility. Уроки хотелось бы на Java. Так же не скупитесь на схемы объясняющие ход выполнения программы. Спасибо.
При изучении ранее пытался разобраться с деревьями по всяким заумных хабрам-швабрам, потратил время. Здесь все предельно ясно и понятно! Самый понятный канал по изучению - коротко, понятно и с простыми примерами.
Просто, ты - идиот! 🎉
Отличное видео, лушче пока не видел, плюс понятно как работает компилятор в данном случае
очень помогло, Спасибо, Сергей!
Большое спасибо, очень хорошо все объяснил. Пожалуй лучшее видео на эту тему из всех, что пересмотрел.
Сергей, огромное спасибо за Ваш труд. Посмотрел уже не один Ваш ролик. Объяснения понятные, с отличными примерами кода, схемы и картинки здорово дополняют материал! Коллеги-обучающиеся, давайте поддержим канал по ссылке под видео.
Спасибо!
Спасибо! Ваши ролики часто выручают в, казалось бы, безвыходных ситуациях :)
Спасибо, благодаря Вашему видео получилось решить задачу)
Прекрасное объяснение! Большое спасибо, Сергей, за ваш труд! Столкнулся с задачей на курсе изучения Java. Тему предварительно не рассказывали, рекурсию не объясняли. Про рекурсию я ранее слышал, но не совсем понимал прикладное значение. Ваше видео - доступнее всего раскрывает тему бинарных деревьев из всех материалов, что я встретил на просторах рунета.
Очень доходчиво. Просто о сложном. У вас талант. Спасибо.👍
Большое спасибо очень крутое объяснение как считать глубину
Потрясно, спасибо за понятное объяснение 🔥
Огромное спасибо, Сергей! Было бы интересно увидеть больше роликов про деревья
спасибо за видео! очень полезная информация, изложенная подробно и озвученная приятно. Ждем продолжения!
Супер объяснение! Спасибо! :)
Спасибо. Отличная подача материала!
Спасибо, очень хорошо объясняете )
Большое спасибо!! Очень интересно.
Спасибо, все доходчиво объяснено
Спасибо за видео! Интересно продолжение темы.
Спасибо! Супер, все наглядно и понятно!
просто супер объяснение спасибо!
Спасибо вам, добрый человек!
Спасибо за видео. Все очень доступно объяснили.
Спасибо, видео помогло понять почему обход назвали "рекурсивным":) До этого видео было полное непонимание как раз в первую очередь из-за названия)
Спасибо вам! Предельно понятно.
Отличное объяснение) спасибо)
Серега, обожаю твои видео! Продолжай пожалуйста снимать обучающие туториалы по Java
Как всегда все понятно, спасибо
Классное видео. Спасибо!
Спасибо за видео!Подписался на твой канал,отлично излагаешь информацию!
Спасибо за видео!
Спасибо!Отличное видео!!!
Спасибо! Очень познавательно!
Нихуя, я не знаю как тут не материться. Все хорошо объясняешь, да еще и с картинками. Спасибо за ваши уроки
Спасибо. Отличное видео
Спасибо, хорошо объяснил)
Просто лучший🎉
Благодарю за ваш труд
спасибо за урок
спасибо за объяснение
Супер!
очень круто!
чому так мало просмотров!?!?
автору ставлю класс!
Спасибо!
Спасибо большое.
Это лучшее видео
спасибо!!
Суперклассное объяснение, только произносите правильно: null - [нал], sum - [сам]. А то потом у англоязычных коллег ухи вянут.
super!!!
Спасибо! я так понял эта рекурсивная магий просисходит из за того что у нас поле того же типа что и класс ну и конструктор естественно принимает тот же тип. Правильно?
класс
Мужик ты Молодец, но можно я придерусь? Сейчас очень много блоггеров говорят “так же самое” и появилось много людей которые начали говорить так же, раньше никогда такого не слышал. Откуда взялось это выражение? Это же два разных слова которые не имеют ничего общего между собой. Может все таки “то же самое”? Если человек вещает для масс то он просто обязан говорить правильно. А за материал спасибо, самое главное что было показано в отладчике что происходит. Очень понятно
нельзя
На Python делается проще:
class Node:
def __init__(self, value, left_node=None, right_node=None):
self.value = value
self.left_node = left_node
self.right_node = right_node
def sum(self):
sum = self.value
if self.left_node:
sum += self.left_node.sum()
if self.right_node:
sum += self.right_node.sum()
return sum
tree = Node(20, Node(7, Node(4, right_node=Node(6)), Node(9)),
Node(35, Node(31, Node(28)), Node(40, Node(38), Node(52))))
print(tree.sum())
балансировка интересна
Примеры графов:
Граф похожих на друг друга аниме, или фильмов или сериалов, или книг и т.д по мнению зрителей
План в виде графа, есть цели, на пути которым есть задачи, и есть связи между целями, это значит одна задача ведет для двух целей.
А в жава нет готового фремворка для деревьев? Типа кубернейта
Дерево состоит из деревьев или из нод?
Внимание глупый вопрос, а зачем class Tree сделали статическим? в итоге получили static class Tree, не совсем понял зачем вы так сделали.
Чтобы подчеркнуть, что Tree - не внутренний класс класса Main и может работать независимо от него.
название класса, вроде как, пишется с заглавной буквы?
Да, вы правы. Написал и не заметил ошибки(
@@arhitutorials странно что IDEA такое пропустила
@@naivais это нормально. Синтаксисом Java не запрещено называть классы с маленькой буквы. Это просто такое общепринятое соглашение.
Кстати в IDEA можно настроить code guidelines как надо, и тогда такие вещи будут подчеркиваться. Но у меня чистая IDEA без кастомных настроек, по этому пропускает.
Как посчитать количество листьев в таком дереве?
int sum(){
int sum = 1; // было int sum = value;
if (left != null){
sum += left.sum();
}
if (right != null){
sum += right.sum();
}
return sum;
}
скажите пожалуйста, что это за IDE ?
Это IntelliJ IDEA
суть понятна, построение понятно, но не компилируется IDEA рисует ошибки((((((
всё))))) нашел ошибку, не сделал класс статическим
@@user-kj3ec6sv1p хорошо, а то я уже было запустил IDEA, собрался разбираться что не так))
Построением дерева занимаются специальные алгоритмы.... Так это же как раз и самое интересное!!!
И зачем отдельно конструктор для листьев? Разве нельзя использовать тот же конструктор, передавая в качестве потомков null??
А какой смысл экономить на конструкторах? Наоборот, на каждый случай использования нужно сделать по конструктору) В нашем случае в коде будет сразу видно где лист создается, а где полноценный узел. Это же хорошо?
@@arhitutorials Не могу сказать, хорошо это или плохо, я не настолько обладаю опытом, просто мне показалось избыточным. И с точки зрения разделения ответственности и декомпозиции, получение строковых последовательностей для отдельных символов(getCodeForChar) в составе класса, описывающего узел, мне показалось чуждым.
Странный метод main, в котором в качестве аргумента принимается массив с наименованием params. Вcегда считал именование args неизменным для JVM
Нужно чтоб сигнатура метода была правильная, а как при этом называются параметры, значения не имеет.
"На практике этим заниматься не надо, это делает специальный алгоритм", а обучение не для практики? Почему тогда не показать сразу в сравнении, как это делается на практике?
спасибо
Спасибо! Очень познавательно!