JavaRush
AI Academy
Акция
Университет
Java FullStack
Python FullStack
AI Native Developer
new
Web FullStack
Обучение
Курсы
Задачи
Опросы
Игры
Помощь
График пинков
Стажировка
Сообщество
Пользователи
Форум
Чат
Статьи
Истории успеха
Активности
Отзывы
Подписки
Светлая тема
Вопрос
  • Отзывы
  • О нас
  • CS50
Начать
Начать обучение
Начать обучение
  • Все вопросы
JavaRush/Помощь по Java задачам/помогите,подскажите
kastaylik
47 уровень
  • 04.10.2023
  • 220просмотров
  • 2комментариев

помогите,подскажите

Вопрос по задаче Построй дерево(5)
Java Collections,  1 уровень,  15 лекция
Решен


Добавлять в дерево элементы мы можем, теперь займись удалением:

необходимо реализовать метод remove(Object o) для удаления элемента дерева, имя которого было получено в качестве параметра.

Если переданный объект не является строкой, метод должен бросить UnsupportedOperationException.

Если в дереве присутствует несколько элементов с переданным именем - можешь удалить только первый найденный.

Не забывай сверять поведение своего дерева с картинкой:

Что будет, если удалить из дерева элементы "3", "4", "5" и "6", а затем попытаться добавить новый елемент?

В таком случае элементы "1" и "2" должны восстановить возможность иметь потомков (возможно, придется внести изменения в метод add()).

Требования:
  • После удаления последнего добавленного элемента из дерева с помощью метода remove, метод size должен возвращать N-1.
  • После удаления второго элемента добавленного в дерево, метод size должен возвращать N/2 + 1 (для случаев где N > 2 и является степенью двойки), N - размер дерева до удаления.
  • Если переданный объект не является строкой, метод remove() должен бросить UnsupportedOperationException.
  • Если ни один элемент не способен иметь потомков, необходимо восстановить такую возможность.
....
package com.javarush.task.task20.task2028; import java.util.List; public class Solution { public static void main(String[] args) { List<String> list = new CustomTree(); for (int i = 1; i < 16; i++) { list.add(String.valueOf(i)); } System.out.println("The list size is " + list.size()); System.out.println("The expected parent is 3. The actual parent is " + ((CustomTree) list).getParent("8")); System.out.println("The expected parent is null. The actual parent is " + ((CustomTree) list).getParent("20")); list.remove("3"); System.out.println("The expected parent is null. The actual parent is " + ((CustomTree) list).getParent("8")); list.add("16"); System.out.println("The expected parent is 9. The actual parent is " + ((CustomTree) list).getParent("16")); list.remove("4"); list.remove("5"); list.remove("6"); System.out.println("Expected: true. Actual: " + list.add("20")); System.out.println("The expected parent is 1. The actual parent is " + ((CustomTree) list).getParent("20")); } }
0
Комментарии (2)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
very junior java developer
Уровень 51
5 октября 2023, 15:10решение
как я понял у тебя зачищаются не вся ветка при удалении элемената, завясящая от элемента. Тут нужна рекурсия по сути, у тебя её нет, тобишь ты должен дочерние элементы удалить этим же методом, что бы за дочерними элементами удались их дочерние и т.д. пока дочерних не останется и ситуация не станет примерно как на картинке в описании вот пример:
if (entryToRemove.leftChild != null) {
    remove(entryToRemove.leftChild.elementName); //вот пошла рекурсия влево от элемента
    entryToRemove.leftChild = null;
}
if (entryToRemove.rightChild != null) {
    remove(entryToRemove.rightChild.elementName); //вот пошла рекурсия вправо от элемента
    entryToRemove.rightChild = null;
}
+2
kastaylik
Уровень 47
7 октября 2023, 12:26
спасибо,добрый человек,наставил на путь истинный. Вроде знаю что для того чтобы понять рекурсию нужно понять рекурсию,но вот как правильно её использовать в этой задаче так и не догадался
0
Обучение
  • Курсы программирования
  • Регистрация
  • Курс Java
  • Помощь по задачам
  • Цены
Сообщество
  • Пользователи
  • Статьи
  • Форум
  • Чат
  • Истории успеха
  • Активности
Компания
  • О нас
  • Контакты
  • Отзывы
  • FAQ
  • Поддержка
JavaRushJavaRush — это интерактивный онлайн-курс по изучению Java-программирования c нуля. Он содержит 1200 практических задач с проверкой решения в один клик, необходимый минимум теории по основам Java и мотивирующие фишки, которые помогут пройти курс до конца: игры, опросы, интересные проекты и статьи об эффективном обучении и карьере Java‑девелопера.
Подписывайтесь
Язык интерфейса
Русский
English Українська
"Программистами не рождаются" © 2026 JavaRush
MastercardVisa
"Программистами не рождаются" © 2026 JavaRush