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

Sdílet
Vložit
  • čas přidán 15. 11. 2022
  • Обучающий курс: stepik.org/a/134212
    Инфо-сайт: proproprogs.ru/structure_data
    Пример реализации бинарного дерева на языке Python. Добавление/удаление вершин дерева, обход дерева в глубину и ширину.

Komentáře • 62

  • @user-qd5bg5sw7k
    @user-qd5bg5sw7k Před rokem +16

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

  • @nickolasmaslow7041
    @nickolasmaslow7041 Před rokem +11

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

  • @user-ee1lx1pe7n
    @user-ee1lx1pe7n Před rokem +4

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

  • @siarheiulas6969
    @siarheiulas6969 Před rokem +2

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

  • @the_lazy_man1
    @the_lazy_man1 Před rokem +1

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

  • @ninamanuylova
    @ninamanuylova Před rokem

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

  • @nikitakolchanov350
    @nikitakolchanov350 Před rokem +2

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

  • @mingboevnurullo
    @mingboevnurullo Před 7 měsíci +1

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

  • @user-iq9sk9wg5e
    @user-iq9sk9wg5e Před rokem +1

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

  • @cashhh7776
    @cashhh7776 Před rokem +1

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

  • @user-yk2zc8vy6u
    @user-yk2zc8vy6u Před rokem +3

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

    • @selfedu_rus
      @selfedu_rus  Před rokem +1

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

  • @milenko1642
    @milenko1642 Před rokem +2

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

  • @alexeyxopyc2471
    @alexeyxopyc2471 Před rokem +1

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

  • @uultayarstankulova6132
    @uultayarstankulova6132 Před rokem +1

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

  • @mr.alians5553
    @mr.alians5553 Před rokem +1

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

  • @everlastingsummer2044
    @everlastingsummer2044 Před rokem +1

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

  • @user-ty4db4hy8k
    @user-ty4db4hy8k Před rokem +1

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

  • @alexanderevgrafov9598
    @alexanderevgrafov9598 Před rokem +1

    Спасибо!

  • @7IdE
    @7IdE Před rokem +4

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

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

    • @user-xj7te3qs8u
      @user-xj7te3qs8u Před rokem

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

    • @artembelsky680
      @artembelsky680 Před rokem

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

  • @user-il4fn2di5u
    @user-il4fn2di5u Před rokem +1

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

    • @selfedu_rus
      @selfedu_rus  Před rokem

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

    • @user-il4fn2di5u
      @user-il4fn2di5u Před rokem

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

  • @user-ni1ty8ul4l
    @user-ni1ty8ul4l Před 5 měsíci +1

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

  • @user-tb9ff5lc6j
    @user-tb9ff5lc6j Před rokem +3

    можно код??

  • @franklinfoster4170
    @franklinfoster4170 Před rokem +1

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

  • @FriskesTV
    @FriskesTV Před 10 měsíci +1

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

    • @selfedu_rus
      @selfedu_rus  Před 10 měsíci

      Epic Pen

    • @FriskesTV
      @FriskesTV Před 10 měsíci +1

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

  • @MrLeyt1125
    @MrLeyt1125 Před 3 měsíci

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

  • @uultayarstankulova6132
    @uultayarstankulova6132 Před rokem +1

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

    • @selfedu_rus
      @selfedu_rus  Před rokem

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

  • @user-cr4ni3pt8q
    @user-cr4ni3pt8q Před 7 měsíci +1

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

  • @cskamoskow2004
    @cskamoskow2004 Před rokem +2

    10:01

  • @veraburak8049
    @veraburak8049 Před rokem +1

    norm

  • @nikitun85
    @nikitun85 Před rokem +1

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

    • @selfedu_rus
      @selfedu_rus  Před rokem +4

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

    • @Artem-er3ie
      @Artem-er3ie Před rokem +2

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

    • @timikys2
      @timikys2 Před 9 měsíci

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

  • @YT-rv6uo
    @YT-rv6uo Před rokem +1

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

    • @YT-rv6uo
      @YT-rv6uo Před rokem

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

    • @Artem-er3ie
      @Artem-er3ie Před rokem

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

  • @MrPalianytsia
    @MrPalianytsia Před rokem +2

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

  • @user-il4fn2di5u
    @user-il4fn2di5u Před rokem +1

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

  • @YT-rv6uo
    @YT-rv6uo Před rokem

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

    • @f1aym574
      @f1aym574 Před rokem +1

      решил?

    • @YT-rv6uo
      @YT-rv6uo Před rokem

      @@f1aym574 неа

    • @Artem-er3ie
      @Artem-er3ie Před rokem

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

  • @umni_kot
    @umni_kot Před rokem +1

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

    • @selfedu_rus
      @selfedu_rus  Před rokem

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

    • @umni_kot
      @umni_kot Před rokem +1

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

  • @mrfang5908
    @mrfang5908 Před rokem +1

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

  • @JuLia-mr7rn
    @JuLia-mr7rn Před 6 měsíci +1

    Метод Апэнд

  • @whale5219
    @whale5219 Před rokem +2

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

  • @user-jd4rl7im6d
    @user-jd4rl7im6d Před rokem +1

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

    • @user-lj2fj3ib6k
      @user-lj2fj3ib6k Před rokem

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

    • @user-jd4rl7im6d
      @user-jd4rl7im6d Před rokem

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

  • @igorseledtsov7345
    @igorseledtsov7345 Před měsícem

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