Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
173 / 131 / 74
Регистрация: 04.12.2013
Сообщений: 552
1

Задание для НЕ начинающих

28.03.2014, 23:20. Показов 3319. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Описание задания довольно-таки простое:
Объект класса Node есть ничто иное как репрезентация корня бинарного дерева с целыми числами.
Есть кусок кода, ваша задача дописать методы CustomIterator preorderIterator, CustomIterator inorderIterator(), CustomIterator postorderIterator().

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
interface CustomIterator {
    boolean hasNext();
    int next();
}
 
class Node {
    final int contents;
    final Node left, right;
    Node parent;
 
    Node(int contents, Node left, Node right) {
        this.contents = contents;
        this.left = left;
        if (left != null) left.parent = this;
        this.right = right;
        if (right != null) right.parent = this;
    }
 
    CustomIterator preorderIterator() { ... }
    CustomIterator inorderIterator() { ... }
    CustomIterator postorderIterator() { ... }
}
Добавлено через 4 часа 40 минут
Это ничто иное, как обход бинарного дерева!
И, кстати, нельзя использовать готовые структуры (LinkedList, ArrayList, Map, ...)
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.03.2014, 23:20
Ответы с готовыми решениями:

C++ задание для начинающих!
Товарищи, кодеры. Помогите пожалуйста с заданием перваку.

Задание для начинающих
Всем привет. Начал изучать 1С по видео курсу Чистова, но хотелось бы попрактиковаться в решении...

Простое задание (для начинающих)
Здравствуйте уважаемые форумчани!Не так давно изучать дискретной математику,столкнулся с таким...

Задание на записи и структуры / С++ для начинающих
Добрый день. нужна помощь в написании программки, ну или может у кого нить завалялась такая же...

12
944 / 687 / 230
Регистрация: 28.04.2013
Сообщений: 1,926
29.03.2014, 14:11 2
не совсем понятна суть проблемы...
Вы предлагаете потренироваться или ожидаете что за вас решат эту задачу?
0
173 / 131 / 74
Регистрация: 04.12.2013
Сообщений: 552
29.03.2014, 14:27  [ТС] 3
Потренироваться, а потом я пришлю правильный вариант.
Мне интересно посмотреть на ваши решения.
0
Эксперт Java
4093 / 3827 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
29.03.2014, 19:55 4
Интересная задача. Вот вариант с inorder. Остальные можно сделать аналогично.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
class InOrderIterator implements CustomIterator {
    Node current;
    boolean leftCompleted;
    boolean rootCompleted;
    InOrderIterator childIterator;
 
    InOrderIterator(Node current) {
        this.current = current;
    }
 
    @Override
    public boolean hasNext() {
        return !rootCompleted || childIterator != null && childIterator.hasNext();
    }
 
    @Override
    public int next() {
        if (childIterator != null && childIterator.hasNext()) {
            return childIterator.next();
        }
        if (rootCompleted) {
            throw new NoSuchElementException();
        }
        if (leftCompleted || current.left == null) {
            //возвращаем корень
            rootCompleted = true;
            if (current.right != null) {  //и сразу создаем итератор для правого
                this.childIterator = new InOrderIterator(current.right);
            }
            return current.contents;
        }
        //Обходим левое поддерево
        leftCompleted = true;
        childIterator = new InOrderIterator(current.left);
        return childIterator.next();
    }
}
0
173 / 131 / 74
Регистрация: 04.12.2013
Сообщений: 552
29.03.2014, 19:58  [ТС] 5
turbanoff, не плохо.
Но попробуйте усложнить для себя задачу: нельзя что-либо изменять или добавлять в коде даном выше.
0
Эксперт Java
4093 / 3827 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
29.03.2014, 19:59 6
Prorok2323, не понял, что имеется в виду? Ведь можно просто этот класс сделать анонимным и возвращать его в методе.
0
173 / 131 / 74
Регистрация: 04.12.2013
Сообщений: 552
29.03.2014, 20:02  [ТС] 7
turbanoff, имеется ввиду не изменять код вообще и работать только с методами CustomIterator preorderIterator() и т.д.
0
Эксперт Java
4093 / 3827 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
29.03.2014, 20:04 8
Всё равно не понял...

Вот ваш метод:
Java
1
CustomIterator inorderIterator() { ... }
Берём, и вместо многоточия вставляем свой код:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
    CustomIterator inorderIterator() {
        return new CustomIterator() {
            boolean leftCompleted;
            boolean rootCompleted;
            CustomIterator childIterator;
 
            @Override
            public boolean hasNext() {
                return !rootCompleted || childIterator != null && childIterator.hasNext();
            }
 
            @Override
            public int next() {
                if (childIterator != null && childIterator.hasNext()) {
                    return childIterator.next();
                }
                if (rootCompleted) {
                    throw new NoSuchElementException();
                }
                if (leftCompleted || left == null) {
                    //возвращаем корень
                    rootCompleted = true;
                    if (right != null) {  //и сразу создаем итератор для правого
                        this.childIterator = right.inorderIterator();
                    }
                    return contents;
                }
                //Обходим левое поддерево
                leftCompleted = true;
                childIterator = left.inorderIterator();
                return childIterator.next();
            }
        };
    }
Это считается, что я не менял код?
0
173 / 131 / 74
Регистрация: 04.12.2013
Сообщений: 552
29.03.2014, 20:06  [ТС] 9
turbanoff, о, теперь так =)
0
53 / 53 / 14
Регистрация: 26.02.2014
Сообщений: 150
31.03.2014, 22:12 10
Prorok2323, с вас теперь итератор файлов по дереву директорий. В качестве тренировки.
0
173 / 131 / 74
Регистрация: 04.12.2013
Сообщений: 552
01.04.2014, 00:12  [ТС] 11
bigwhitefish, ого!

Добавлено через 1 минуту
Но я могу прислать решение этой задачи, как и говорил выше.
0
53 / 53 / 14
Регистрация: 26.02.2014
Сообщений: 150
01.04.2014, 00:58 12
Prorok2323, задача не то чтобы страшная, но неприятная.
а ведь если бы были в яве манипуляции с контекстами, делалось бы в 3 строчки.
с C# например есть такое (yield)
0
173 / 131 / 74
Регистрация: 04.12.2013
Сообщений: 552
01.04.2014, 01:00  [ТС] 13
Я так полагаю, что в Java это не используется по той же причине, что и указатели - небезопасность.
0
01.04.2014, 01:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.04.2014, 01:00
Помогаю со студенческими работами здесь

Задание На Классы С++Дня начинающих
Уважаемые программисты Прошу помочь. так как эту тему я не понял :(. Задание: Обьявить в классе 2...

Проверьте верно ли сделано задание (задание для ослабленных детей)
Схема дана на фото, нужно найти скорости точек А и В изображенных на схеме, проверьте мое решение...

Ресурсы для самостоятельного изучения немецкого языка для начинающих
Господа, подскажите, пожалуйста, по Вашему личному опыту, неплохие ресурсы для самостоятельного...

Исходники кода для книги Java 8 (2015) Шилдт - руководство для начинающих
Там код иногда странные ошибки возникают особенно UNicode сбивается , не могу нормально точь в точь...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru