BP2-3-4-09 Удаление элементов из бинарного дерева поиска

Поделиться
HTML-код
  • Опубликовано: 26 окт 2024

Комментарии • 25

  • @Loller521
    @Loller521 8 лет назад +14

    Лучшее объяснение из всех!
    Спасибо!

  • @rvrby2541
    @rvrby2541 8 лет назад +7

    Очень доступно объяснил, столько читал по этой теме ничего не мог понять) Пошагово начал кодировать все это дело и пошла вода горячая, большое спасибо!

  • @ShoemasterX
    @ShoemasterX Год назад

    Красава, мужик. Я как раз не мог понять, как удалить узел, если самый левый из элементов правого поддерева имеет одно поддерево. После твоего объяснения сразу стало все понятно. Спасибо!

  • @Warrior_Shade
    @Warrior_Shade 4 года назад +1

    Спасибо за доступное объяснение. По алгоритму сам ручками написал, и всё работает)

  • @3142shara
    @3142shara 3 года назад +2

    Только с твоего видео понял, от души

  • @АндрейСудаков-с1х
    @АндрейСудаков-с1х 2 года назад

    Красавчик. Спасибо за разбор разных примеров!

  • @ОлександрЧерньонков

    Спасибо! Наконец-то я понял принцип)

  • @Непрофессионалымы

    спасибо

  • @ДенисЛобанов-в4е
    @ДенисЛобанов-в4е 2 года назад

    Идеальное объяснение!

  • @RussianGuitarflyer
    @RussianGuitarflyer 4 года назад +1

    Огонь объяснение

  • @ВячеславСотников-з8с

    Thank you, buddy!

  • @nataliyaaubury1379
    @nataliyaaubury1379 7 лет назад +1

    Супер!

  • @Alexander-wz9nu
    @Alexander-wz9nu 8 лет назад +1

    Отлично!

  • @kpanat
    @kpanat Год назад

    Всё равно даже это не работает... Хотя по идее все случаи описаны. Но возникают проблемы при реализации поиска минимального элемента справа от удаляемого... Хотя обычно не возникают. Но иногда возникает ситуация когда минимальный это первый правый... а родительский для него будет как раз удаляемый... остальных или нет, или все справа. Просто тогда получается что мы удаляем родительский элемент от минимального... И дерево сразу становится невалидным. Эту ситуацию надо отрабатывать особо. Второй момент это то, что в дереве всегда надо хранить указатель на корень. А если вы удаляете именно корень, то ваш указатель на корень опять же становится невалидным потому что это указатель на освобождённую память. Надо его правильно и вовремя корректировать. Тут ещё много подводных камней, которые надо все отработать. И как следует оттестировать на больших деревьях удаляя по одному элементу пока дерево не станет пустым. Я 2 недели отлаживал функцию удаления. И ещё не надо забывать о семантике перемещения. Потому что когда у вас инты, то нет проблем, а когда большие объекты то это существенно. для нормальной отладки нужен бы отладчик, который рисовал бы само дерево со связями и значениями ну или нужную его часть. Но таких отладчиков не существует. Мы имеем только абстрактные отладчики т.е. когда где-то что-то можно посмотреть но представить графический образ всей структуры данных со всем связями пока что нельзя... Поэтому рисуйте сами картинки. Это оч вам поможет найти ошибки и исправить. Для сложных структур данных таких как деревья графы это оч важно... В памяти в своей голове это почти невозможно из-за сложности структуры и множеством связей и вариантов, которые могут быть. А отобразить это можно и разобраться что к чему, где что не так и как это исправить...

  • @olegshi8550
    @olegshi8550 7 лет назад +1

    А как это написать на си.Это надо функцию с 4 проверками?

    • @dgjjhfdh7042
      @dgjjhfdh7042 5 лет назад +1

      хуй тебе кто это объяснит, либо сам методом тыка подбирай долго долго, либо 200 рублей заплати и за тебя решат, ибо никто нигде никогда не научит никого програмировать! а только картинки с палочками и циферками покажут и всё

    • @ИванСеров-р4с
      @ИванСеров-р4с 4 года назад +1

      @@dgjjhfdh7042 в интернете куча реализаций любых алгоритмов на любом языке... хотя чтобы не написать код самому после такого объяснения, надо быть либо полным идиотом, либо не знать язык

  • @nikkkkkitos
    @nikkkkkitos 7 лет назад

    где тройка то?

  • @НиколайПшеничный-г5щ

    Определение бинарного дерева поиска звучит совсем иначе. Все узлы левого поддерева должны быть НЕ БОЛЬШЕ данного узла, а все узлы правого поддерева СТРОГО БОЛЬШЕ данного узла. Соответственно и приведенное Вами дерево не является бинарным деревом поиска.

    • @machine_kid
      @machine_kid 7 лет назад +2

      нет, у него все правильно

    • @kpanat
      @kpanat Год назад

      @@machine_kid не спорьте есть разные бинарные деревья. Это дерево с дубликатами... А обычно используют деревья без дубликатов, те строгое дерево. там слева строго меньше а справа строго больше, а если равно то не вставляется, т.е. игнорируют. Именно последние чаще всего используют. В STL эта структура данных называется set. С повторениями multiset. Есть подобная структура пар. Тоже бинарное дерево но когда к узловому занчению привязаны данные. Называется map. Это с уникальными ключами. А если ключи неуникальны, т.е с повторениями ключей(данные мы не рассматриваем, то это multimap. Но не обольщайтесь бинарные деревья не такие уж и хорошие структуры данных. Они хороши только если у нас они сбалансированы. А если нет, то они ведут себя как список... А если всё время заниматься балансировкой, то тоже не дело. Вобщем балансировка дерева сильно зависит от того в каком порядке элементы добавляются и удаляются... Если удалить те же элементы(или добавить) но в ином порядке, то можно подобрать такой порядок что дерево останется сбалансированным. На этом построена теория B деревьев. Это тоже бинарные деревья но вставка и добавление группы элементов производится особым образом чтобы дерево оставалось сбалансированным без перестроения дерева.