#20. Реализация бинарного дерева на Python | Структуры данных

Обучающий курс: stepik.org/a/134212
Инфо-сайт: proproprogs.ru/structure_data
Пример реализации бинарного дерева на языке Python. Добавление/удаление вершин дерева, обход дерева в глубину и ширину.

Пікірлер: 66

  • @user-qd5bg5sw7k
    @user-qd5bg5sw7k Жыл бұрын

    Великолепное исполнения и подача, все твои уроки понятны!

  • @nickolasmaslow7041
    @nickolasmaslow7041 Жыл бұрын

    Очень круто объясняешь, хотел бы чтобы у меня был такой преподаватель в ВУЗе

  • @user-ee1lx1pe7n
    @user-ee1lx1pe7n Жыл бұрын

    Шикарнейшее объяснение! Спасибо!

  • @siarheiulas6969
    @siarheiulas6969 Жыл бұрын

    Спасибо! Замечательная подача материала!

  • @user-yk2zc8vy6u
    @user-yk2zc8vy6u Жыл бұрын

    И снова годнота) Спасибо Единственный минус, который я для себя нашёл в бинарных деревьях, это то, что их долго создавать для большого кол-во данных, так как каждый новый элемент начинает поиск для вставки с головы

  • @selfedu_rus

    @selfedu_rus

    Жыл бұрын

    да, здесь в среднем логарифмическое время добавления нового элемента

  • @milenko1642
    @milenko1642 Жыл бұрын

    Прекрасный код, с самого утра, хотя с самого вчера нет сил)

  • @ninamanuylova
    @ninamanuylova Жыл бұрын

    спасибо за видео! очень полезно, долго искала эту тему.

  • @the_lazy_man1
    @the_lazy_man1 Жыл бұрын

    Спасибо большое. Было очень интересно.

  • @nikitakolchanov350
    @nikitakolchanov350 Жыл бұрын

    Спасибо тебе, что ты есть ❤

  • @justnothingnet
    @justnothingnet6 ай бұрын

    Спасибо большое за урок

  • @7IdE
    @7IdE Жыл бұрын

    Шикарный видос, все как обычно. Собсно, зашел сюда целенаправленно ради 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

    @7IdE

    Жыл бұрын

    Ну и еще одна ремарка сверху - нейминги. :D sr, pr, p, ptsr - это же вообще жесть. :D

  • @user-xj7te3qs8u

    @user-xj7te3qs8u

    Жыл бұрын

    @@7IdE пздц, я чуть не здох пока пытался понять

  • @artembelsky680

    @artembelsky680

    Жыл бұрын

    @@user-xj7te3qs8u есть такая хня бро)

  • @user-ty4db4hy8k
    @user-ty4db4hy8k11 ай бұрын

    Сергей, огромная благодарность за прекрасные уроки! Мне лично не хватает только одного - ссылок на первоисточники.

  • @user-iq9sk9wg5e
    @user-iq9sk9wg5e Жыл бұрын

    Спасибо автору 👍

  • @cashhh7776
    @cashhh7776 Жыл бұрын

    Спасибо автору!

  • @mr.alians5553
    @mr.alians5553 Жыл бұрын

    Очень классный урок, большое спасибо. Но есть один момент, если в корне будет стоять минимальное значение - то вызов функции для его удаления выдаст ошибку. Что бы ее исправить, нужно дописать в функцию 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) Тогда все заработает )

  • @alexeyxopyc2471
    @alexeyxopyc2471 Жыл бұрын

    спасибо за видео!

  • @uultayarstankulova6132
    @uultayarstankulova6132 Жыл бұрын

    Спасибо большое!!!

  • @everlastingsummer2044
    @everlastingsummer2044 Жыл бұрын

    спасибо большое!

  • @alexanderevgrafov9598
    @alexanderevgrafov9598 Жыл бұрын

    Спасибо!

  • @user-il4fn2di5u
    @user-il4fn2di5u Жыл бұрын

    Сергей, спасибо огромное! Как всегда, на высочайшем уровне ))) Жаль кода на гитхабе не выложено, но ничего, руками напишу ))))

  • @selfedu_rus

    @selfedu_rus

    Жыл бұрын

    Текстовые варианты занятий здесь: proproprogs.ru/structure_data

  • @user-il4fn2di5u

    @user-il4fn2di5u

    Жыл бұрын

    @@selfedu_rus Оу, точно! Спасибо ))

  • @user-ni1ty8ul4l
    @user-ni1ty8ul4l3 ай бұрын

    Спасибо! Поясните, пожалуйста, как метод __find поймет при возврате node и parent на что указывают эти переменные? Мы же не присвоили им ничего внутри кода?🧐

  • @FriskesTV
    @FriskesTV9 ай бұрын

    Здравствуйте Сергей, подскажите пожалуйста какую вы используете программу для того чтобы рисовать на экране?

  • @selfedu_rus

    @selfedu_rus

    9 ай бұрын

    Epic Pen

  • @FriskesTV

    @FriskesTV

    9 ай бұрын

    @@selfedu_rus благодарю за столь быстрый ответ!

  • @franklinfoster4170
    @franklinfoster4170 Жыл бұрын

    Два нижних подчёркивания перед переменной делает ее приватной, а что значит два нижних подчёркивания после переменной?

  • @user-cr4ni3pt8q
    @user-cr4ni3pt8q6 ай бұрын

    append не будет работать так как вы идёте до значения None, а потом возвращаете None, parent, False. Соответственно s нет и не с чем связывать. Попробуйте перепишите код до 10 минуты и проверьте

  • @user-tb9ff5lc6j
    @user-tb9ff5lc6j Жыл бұрын

    можно код??

  • @kat_katchinskiy
    @kat_katchinskiy6 ай бұрын

    Поясните пожалуйста про эти двойные чёрточки перед __find и __del_leaf, не понимаю!

  • @selfedu_rus

    @selfedu_rus

    6 ай бұрын

    объявление приватных (private) атрибутов класса (доступны по имени только внутри класса и не доступны извне)

  • @kat_katchinskiy

    @kat_katchinskiy

    6 ай бұрын

    @@selfedu_rus спасибо)

  • @MrLeyt1125
    @MrLeyt11252 ай бұрын

    Спасибо, жаль нет реализации на Си

  • @uultayarstankulova6132
    @uultayarstankulova6132 Жыл бұрын

    Скажите пожалуйста, это получается сбаланированное бинарное дерево?

  • @selfedu_rus

    @selfedu_rus

    Жыл бұрын

    Нет, балансировка здесь не выполняется.

  • @kat_katchinskiy
    @kat_katchinskiy6 ай бұрын

    Жесть эти деревья

  • @nikitun85
    @nikitun85 Жыл бұрын

    Сергей, как всегда, топчик! Жирнющий лайк! Хотел поинтересоваться, не собираетесь ли вы дублировать канал на каком-нибудь импортозамещенном видеохостинге? Например, Рутюб, Его хоть и заслуженно ругают, он все-таки он постепенно облагораживается. В смысле качества работы, а не контента. К тому же там организован целый раздел для обучающих видео. Пока почти пустующий. Ваши лекции органично бы туда вписались. А то я уже постепенно выкачиваю с вашего канала бесценный дидактический материал к себе на жесткий диск )). Вдруг все-таки Ютюб отключат. Конечно, есть впн, но и их тоже постепенно прикрывают, плюс у скорости, как правило, не те.

  • @selfedu_rus

    @selfedu_rus

    Жыл бұрын

    Я не думаю, что отключат, если бы хотели уже бы сделали, а так есть шанс, что в таком виде останется. Альтернатив реальных ютубу нет и понятно почему - слишком сложный сервис и с нуля быстро его не повторишь. Будем надеяться, что ютуб продолжит работу.

  • @Artem-er3ie

    @Artem-er3ie

    Жыл бұрын

    Слава Украине!

  • @timikys2

    @timikys2

    7 ай бұрын

    @@Artem-er3ie Причем здесь это? И в чем слава то? Нищая окраина, без экономики, без половины населения и вся в долгах на десятилетия вперед

  • @YT-rv6uo
    @YT-rv6uo Жыл бұрын

    Line 48 in t = tree() Name 'tree' is not defined.Did you mean:'Tree' Что я не так написал? Код проверял

  • @YT-rv6uo

    @YT-rv6uo

    Жыл бұрын

    Еще line 52 in module t.append(Node(x)) AttributeEror'tree' object has no attribute 'append'

  • @Artem-er3ie

    @Artem-er3ie

    Жыл бұрын

    Напиши Tree с большой

  • @MrPalianytsia
    @MrPalianytsia Жыл бұрын

    Классно, но я так и не понял для чего они нужны эти деревья.

  • @selfedu_rus

    @selfedu_rus

    Жыл бұрын

    об этом дальше

  • @user-il4fn2di5u
    @user-il4fn2di5u Жыл бұрын

    Кстати, все падает, если попытаться удалить корень ))

  • @YT-rv6uo
    @YT-rv6uo Жыл бұрын

    line 52 in module t.append(Node(x)) AttributeEror'tree' object has no attribute 'append' Что делать весь код проверил

  • @f1aym574

    @f1aym574

    Жыл бұрын

    решил?

  • @YT-rv6uo

    @YT-rv6uo

    Жыл бұрын

    @@f1aym574 неа

  • @Artem-er3ie

    @Artem-er3ie

    Жыл бұрын

    Возможно ты при создания класса написал три с Большой. Попробуй t= Tree()

  • @cskamoskow2004
    @cskamoskow2004 Жыл бұрын

    10:01

  • @veraburak8049
    @veraburak8049 Жыл бұрын

    norm

  • @umni_kot
    @umni_kot Жыл бұрын

    для чего перед __find два подчеркивания ?

  • @selfedu_rus

    @selfedu_rus

    Жыл бұрын

    приватный метод

  • @umni_kot

    @umni_kot

    Жыл бұрын

    @@selfedu_rus спс почитаю о нем

  • @JuLia-mr7rn
    @JuLia-mr7rn4 ай бұрын

    Метод Апэнд

  • @whale5219
    @whale521910 ай бұрын

    Сергей, большое спасибо, НО научитесь нормально называть переменные.

  • @mrfang5908
    @mrfang5908 Жыл бұрын

    сложновато однако)

  • @user-jd4rl7im6d
    @user-jd4rl7im6d Жыл бұрын

    Я думаю, что рекурсивно искать элементы это плохая идея, ведь мы подразумеваем, что наше дерево может быть бесконечного размера, а значит теоретически мы получим проблемы с памятью, переполнение стека и достижение максимального значения глубины рекурсии (это можно обойти, но все же).

  • @user-lj2fj3ib6k

    @user-lj2fj3ib6k

    Жыл бұрын

    То что рекурсия занимает много памяти - это очевидный факт. Чтобы решить эту проблему придумали красно-чёрные деревья в них не используется рекурсия. Автор написал реализацию обычного, несбалансированного бинарного дерева

  • @user-jd4rl7im6d

    @user-jd4rl7im6d

    Жыл бұрын

    @@user-lj2fj3ib6k вообще не поняли о чем я говорю, и смешали все в кучу. И обычное бинарное дерево и красно-черное дерево не может быть ни рекурсивным, ни итеративным, речь об алгоритме поиска элемента. Его следует писать итеративно (и не важно какое дерево), так как если вы будете использовать рекурсию, максимальная длина ветки дерева будет ограничена.

  • @igorseledtsov7345
    @igorseledtsov734510 күн бұрын

    ну нельзя так... потрясающе безграмотно РПоказано как не надо делать