#20. Реализация бинарного дерева на Python | Структуры данных
Обучающий курс: stepik.org/a/134212
Инфо-сайт: proproprogs.ru/structure_data
Пример реализации бинарного дерева на языке Python. Добавление/удаление вершин дерева, обход дерева в глубину и ширину.
Пікірлер: 66
Великолепное исполнения и подача, все твои уроки понятны!
Очень круто объясняешь, хотел бы чтобы у меня был такой преподаватель в ВУЗе
Шикарнейшее объяснение! Спасибо!
Спасибо! Замечательная подача материала!
И снова годнота) Спасибо Единственный минус, который я для себя нашёл в бинарных деревьях, это то, что их долго создавать для большого кол-во данных, так как каждый новый элемент начинает поиск для вставки с головы
@selfedu_rus
Жыл бұрын
да, здесь в среднем логарифмическое время добавления нового элемента
Прекрасный код, с самого утра, хотя с самого вчера нет сил)
спасибо за видео! очень полезно, долго искала эту тему.
Спасибо большое. Было очень интересно.
Спасибо тебе, что ты есть ❤
Спасибо большое за урок
Шикарный видос, все как обычно. Собсно, зашел сюда целенаправленно ради 3-ьего случая удаления - самостоятельно не особо получилось его реализовать. Да и просто посмотреть на твою реализацию этого дела. Но одну ремарку, все же, оставлю. Метод __del_one_child лучше бы переписать вот так: def __del_one_child(self, current, parent): if parent.left == current: parent.left = current.left or current.right else: parent.right = current.left or current.right И красивше, и читабельнее, и привет синтаксическому сахару Питона. А так видео супер, все как обычно!
@7IdE
Жыл бұрын
Ну и еще одна ремарка сверху - нейминги. :D sr, pr, p, ptsr - это же вообще жесть. :D
@user-xj7te3qs8u
Жыл бұрын
@@7IdE пздц, я чуть не здох пока пытался понять
@artembelsky680
Жыл бұрын
@@user-xj7te3qs8u есть такая хня бро)
Сергей, огромная благодарность за прекрасные уроки! Мне лично не хватает только одного - ссылок на первоисточники.
Спасибо автору 👍
Спасибо автору!
Очень классный урок, большое спасибо. Но есть один момент, если в корне будет стоять минимальное значение - то вызов функции для его удаления выдаст ошибку. Что бы ее исправить, нужно дописать в функцию del_node, а именно в elif для удаления элемента с одним потомком, одно условие, что бы получилось вот так: elif s.left is None or s.right is None: if s == p: self.root = s.right else: self.__del_one_child(s, p) Тогда все заработает )
спасибо за видео!
Спасибо большое!!!
спасибо большое!
Спасибо!
Сергей, спасибо огромное! Как всегда, на высочайшем уровне ))) Жаль кода на гитхабе не выложено, но ничего, руками напишу ))))
@selfedu_rus
Жыл бұрын
Текстовые варианты занятий здесь: proproprogs.ru/structure_data
@user-il4fn2di5u
Жыл бұрын
@@selfedu_rus Оу, точно! Спасибо ))
Спасибо! Поясните, пожалуйста, как метод __find поймет при возврате node и parent на что указывают эти переменные? Мы же не присвоили им ничего внутри кода?🧐
Здравствуйте Сергей, подскажите пожалуйста какую вы используете программу для того чтобы рисовать на экране?
@selfedu_rus
9 ай бұрын
Epic Pen
@FriskesTV
9 ай бұрын
@@selfedu_rus благодарю за столь быстрый ответ!
Два нижних подчёркивания перед переменной делает ее приватной, а что значит два нижних подчёркивания после переменной?
append не будет работать так как вы идёте до значения None, а потом возвращаете None, parent, False. Соответственно s нет и не с чем связывать. Попробуйте перепишите код до 10 минуты и проверьте
можно код??
Поясните пожалуйста про эти двойные чёрточки перед __find и __del_leaf, не понимаю!
@selfedu_rus
6 ай бұрын
объявление приватных (private) атрибутов класса (доступны по имени только внутри класса и не доступны извне)
@kat_katchinskiy
6 ай бұрын
@@selfedu_rus спасибо)
Спасибо, жаль нет реализации на Си
Скажите пожалуйста, это получается сбаланированное бинарное дерево?
@selfedu_rus
Жыл бұрын
Нет, балансировка здесь не выполняется.
Жесть эти деревья
Сергей, как всегда, топчик! Жирнющий лайк! Хотел поинтересоваться, не собираетесь ли вы дублировать канал на каком-нибудь импортозамещенном видеохостинге? Например, Рутюб, Его хоть и заслуженно ругают, он все-таки он постепенно облагораживается. В смысле качества работы, а не контента. К тому же там организован целый раздел для обучающих видео. Пока почти пустующий. Ваши лекции органично бы туда вписались. А то я уже постепенно выкачиваю с вашего канала бесценный дидактический материал к себе на жесткий диск )). Вдруг все-таки Ютюб отключат. Конечно, есть впн, но и их тоже постепенно прикрывают, плюс у скорости, как правило, не те.
@selfedu_rus
Жыл бұрын
Я не думаю, что отключат, если бы хотели уже бы сделали, а так есть шанс, что в таком виде останется. Альтернатив реальных ютубу нет и понятно почему - слишком сложный сервис и с нуля быстро его не повторишь. Будем надеяться, что ютуб продолжит работу.
@Artem-er3ie
Жыл бұрын
Слава Украине!
@timikys2
7 ай бұрын
@@Artem-er3ie Причем здесь это? И в чем слава то? Нищая окраина, без экономики, без половины населения и вся в долгах на десятилетия вперед
Line 48 in t = tree() Name 'tree' is not defined.Did you mean:'Tree' Что я не так написал? Код проверял
@YT-rv6uo
Жыл бұрын
Еще line 52 in module t.append(Node(x)) AttributeEror'tree' object has no attribute 'append'
@Artem-er3ie
Жыл бұрын
Напиши Tree с большой
Классно, но я так и не понял для чего они нужны эти деревья.
@selfedu_rus
Жыл бұрын
об этом дальше
Кстати, все падает, если попытаться удалить корень ))
line 52 in module t.append(Node(x)) AttributeEror'tree' object has no attribute 'append' Что делать весь код проверил
@f1aym574
Жыл бұрын
решил?
@YT-rv6uo
Жыл бұрын
@@f1aym574 неа
@Artem-er3ie
Жыл бұрын
Возможно ты при создания класса написал три с Большой. Попробуй t= Tree()
10:01
norm
для чего перед __find два подчеркивания ?
@selfedu_rus
Жыл бұрын
приватный метод
@umni_kot
Жыл бұрын
@@selfedu_rus спс почитаю о нем
Метод Апэнд
Сергей, большое спасибо, НО научитесь нормально называть переменные.
сложновато однако)
Я думаю, что рекурсивно искать элементы это плохая идея, ведь мы подразумеваем, что наше дерево может быть бесконечного размера, а значит теоретически мы получим проблемы с памятью, переполнение стека и достижение максимального значения глубины рекурсии (это можно обойти, но все же).
@user-lj2fj3ib6k
Жыл бұрын
То что рекурсия занимает много памяти - это очевидный факт. Чтобы решить эту проблему придумали красно-чёрные деревья в них не используется рекурсия. Автор написал реализацию обычного, несбалансированного бинарного дерева
@user-jd4rl7im6d
Жыл бұрын
@@user-lj2fj3ib6k вообще не поняли о чем я говорю, и смешали все в кучу. И обычное бинарное дерево и красно-черное дерево не может быть ни рекурсивным, ни итеративным, речь об алгоритме поиска элемента. Его следует писать итеративно (и не важно какое дерево), так как если вы будете использовать рекурсию, максимальная длина ветки дерева будет ограничена.
ну нельзя так... потрясающе безграмотно РПоказано как не надо делать