Обучающий курс: stepik.org/a/1... Инфо-сайт: proproprogs.ru... Пример реализации бинарного дерева на языке Python. Добавление/удаление вершин дерева, обход дерева в глубину и ширину.
И снова годнота) Спасибо Единственный минус, который я для себя нашёл в бинарных деревьях, это то, что их долго создавать для большого кол-во данных, так как каждый новый элемент начинает поиск для вставки с головы
Шикарный видос, все как обычно. Собсно, зашел сюда целенаправленно ради 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 И красивше, и читабельнее, и привет синтаксическому сахару Питона. А так видео супер, все как обычно!
Очень классный урок, большое спасибо. Но есть один момент, если в корне будет стоять минимальное значение - то вызов функции для его удаления выдаст ошибку. Что бы ее исправить, нужно дописать в функцию 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) Тогда все заработает )
append не будет работать так как вы идёте до значения None, а потом возвращаете None, parent, False. Соответственно s нет и не с чем связывать. Попробуйте перепишите код до 10 минуты и проверьте
Сергей, как всегда, топчик! Жирнющий лайк! Хотел поинтересоваться, не собираетесь ли вы дублировать канал на каком-нибудь импортозамещенном видеохостинге? Например, Рутюб, Его хоть и заслуженно ругают, он все-таки он постепенно облагораживается. В смысле качества работы, а не контента. К тому же там организован целый раздел для обучающих видео. Пока почти пустующий. Ваши лекции органично бы туда вписались. А то я уже постепенно выкачиваю с вашего канала бесценный дидактический материал к себе на жесткий диск )). Вдруг все-таки Ютюб отключат. Конечно, есть впн, но и их тоже постепенно прикрывают, плюс у скорости, как правило, не те.
Я не думаю, что отключат, если бы хотели уже бы сделали, а так есть шанс, что в таком виде останется. Альтернатив реальных ютубу нет и понятно почему - слишком сложный сервис и с нуля быстро его не повторишь. Будем надеяться, что ютуб продолжит работу.
Я думаю, что рекурсивно искать элементы это плохая идея, ведь мы подразумеваем, что наше дерево может быть бесконечного размера, а значит теоретически мы получим проблемы с памятью, переполнение стека и достижение максимального значения глубины рекурсии (это можно обойти, но все же).
То что рекурсия занимает много памяти - это очевидный факт. Чтобы решить эту проблему придумали красно-чёрные деревья в них не используется рекурсия. Автор написал реализацию обычного, несбалансированного бинарного дерева
@@ВикторК-н2к вообще не поняли о чем я говорю, и смешали все в кучу. И обычное бинарное дерево и красно-черное дерево не может быть ни рекурсивным, ни итеративным, речь об алгоритме поиска элемента. Его следует писать итеративно (и не важно какое дерево), так как если вы будете использовать рекурсию, максимальная длина ветки дерева будет ограничена.
Спасибо! Поясните, пожалуйста, как метод __find поймет при возврате node и parent на что указывают эти переменные? Мы же не присвоили им ничего внутри кода?🧐
в конце функции __find возвращается node, parent, False, а в функции append где вызывается сама функция __find так же 3 значения s, p, fl_find, соответсвенно s = node, p = parent, fl_find = False