Построй дерево(5)

  • 11
  • Недоступна
Добавлять в дерево элементы мы можем, теперь займись удалением: необходимо реализовать метод remove(Object o), который будет удалять элемент дерева имя которого было полученного в качестве параметра.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (88)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Пётр33 уровень, Москва
вчера, 21:11
На курсере я делал и ЛинкедЛист и TreeList в проектах, интересный опыт. Тут немного другая реализация, конечно)
IgorDrankin24 уровень
суббота, 09:43
Ввел понятие getCurrentLevel(), которая возвращает текущий уровень самого нижнего элемента и задача решается достаточно быстро, правда все через рекурсии, хз как надо было :) Когда добавлял элемент - в рекурсии спрашивал мы на родительском уровне или нет, если на родительском - слева направо искал null детей, если их нет - возвращается false и все тоже самое запускается только на уровне +1.
13Black33 уровень, Москва
16 апреля, 15:10
Блин! Именно эту задачу хотел решить с первой попытки (обычно напох жму валидацию), старался тестировал, оказалось неправильно понял первый пункт - думал последний это типа удалили все элементы и он должен вернуть -1. Задача кстати не особо понравилась - просто заставляла все методы пределать через очередь, но в add я оставил рекурсию, рука не поднялась - я вчера весь вечер сидел выдумывал. Эта задачка далась проще. Аdd, наверное, проще было бы тоже через очередь сделать. Добавление 16 кстати переклинило меня думаю а с хера туда то? Вчитался в условие и понял главную мысль - если удалили элемент то его родитель не может иметь потомков в эту сторону, и только когда обоих потомков удалили тогда разрешается их иметь. 541й
TheDIP23 уровень, Киев
среда, 14:50
а как справился с После удаления второго элемента добавленного в дерево, метод size должен возвращать N/2 + 1 (для случаев где N > 2 и является степенью двойки), N - размер дерева до удаления. ?
13Black33 уровень, Москва
среда, 15:26
Тут загводзка в том что если добавляешь более 50 элементов, хер его знает полноценное у тебя дерево или нет, поэтому может отличаться от этой формулы. Так что нужно закинуть такое количество чтобы дерево было симметричное и проверить. Метод сайз у меня в цикле имплементит локальную перменную, если левый потомок не null в конец очереди, если правый не null в конец очереди. Цикл завершается если очередь пуста.
Sipa Barskij26 уровень
29 марта, 13:52
У меня так же прошло с The expected parent is 9. The actual parent is 1 . И мне кажется, что так тоже логичней, чем как на картинке, если мы идем сверху вниз. Или я пропустил условие, что ищем место в последней линии, снизу вверх? Видимо для этого у нас введена линия "line number", и с ее помощью мы можем добавлять в нижние ? Решение в итоге оказалось довольно простым, отдельный метод -> рекурсия. Плюс в самом Entry чуть подправил check method.
Василий40 уровень, Киев
26 марта, 12:25
Что-то не зашла задача вообще. Тупо не интересно. Копипаст готовых решений с гитхаба.
Сергей Беляков23 уровень, Москва
25 марта, 19:22
504ый!) 1 попытка, но не без использования подсказок из комментов. Делал через ArrayList с помощью рекурсии. Подсказка: если получаете "ConcurrentModificationException", используйте "обычный" for.
Alexey29 уровень, Минск
10 марта, 11:14
478. 3 попытки :) Решил рекурсией, но протупил часа 4, флаги выставлял для родителей удаленных детей, но самих детей у родителей не об(null)ял, а попытки потратил на то, что забыл про исключение, всунул в трай его - опять не приняло, сделал серез инстанс - ОК
6 марта, 23:00
469. 19 попыток) Долго мучался и не проходило последнее условие, потому что не добавил при удалении элемента флаг для его родителя, что элемента уже нет, и не выставил availableToAddLeftChildren\availableToAddRightChildren = true. Разница с 4 заданием - изменил список на ConcurrentLinkedQueue, чтобы в методе remove во время прохождения списка можно было удалять элементы. В методе add ничего не добавлял. Итог - 19 строк для метода remove + 9 строк для доп метода на рекурсивное удаление потомков
Павел Афанасьев36 уровень, Москва
20 февраля, 21:11
со 2-й попытки. Всего эту задачу решили 450 учеников. До Лафоре не добрался пока. Использовал магию ссылок объектов на объекты. NullPointerExeption получал неоднократно.
Андрей33 уровень, Одесса
13 февраля, 20:55
439 - со второй попытки, была установлена какая то левая библиотека((.. По задаче. Теория - Лафоре Роберт. Структуры данных и алгоритмы Java. В этой книге доступно и понятно, а главное с примерами на java описаны бинарные деревья. Там даже совпадают названия некоторых полей с нашим классом Entry))))))..... Никаких алгоритмов поиска в ширину, глубину и в высоту - Я не делал. Из книги вытащил один алгоритм обхода дерева - на три строчки))))(офигительная вещь). Модернизировал под себя.Там их три вида - все практически одинаковы в работе - только представляют результат по разному. Все точки держал в дополнительном list`e, через который практически все и делал. По поводу добавление 16. У меня проходит через единицу а не через девятку.