Итератор для бинарного дерева

194
20 марта 2018, 01:12

Всем привет. Задача реализовать бинарное дерево поиска. Обязательное условие реализовать итератор. Уже несколько дней пытаюсь найти решение, гугл не помогает, везде в основном примеры методов для вывода на печать всех элементов, но мне нужно реализовать именно итератор, с методами next и hasNext. Буду очень признателен за вербальный алгоритм, и бесконечно благодарен за пример в коде. P.S. Метод add() реализован, элементы корректно добавляются.

 @Override
    public Iterator<E> iterator() {
      int expectedModCount = modCount;
       return new Iterator<E>() {
        BinNode<E> curr = root;
        @Override
        public boolean hasNext() {
            return curr != null;
        }
        @Override
        public E next() {
            checkModCount();
            //todo
             return ;
        }

        private void checkModCount() {
            if (expectedModCount != modCount) {
                throw new ConcurrentModificationException();
            }
        }
    };
}

}

Answer 1

Давайте заменим java на автомастерскую. "Ребят, собрал машину, двигатель впихнул, ездит. Вот только тормоза не могу запилить. Облазил весь интернет, а там только показывают как двери менять. Машина обычная - на колесах, они такие крутятся и она вперед-назад". Не надо так ) Понял ваш вопрос только потому что сам когда то учился в универе.

class Node {
     Object value;
     Node left, right;
}

Я так понимаю ваша проблема, заключается в том, что вы знаете как реализовывать классический рекурсивный вариант:

void go(Node root) {
    go(root.left);
    go(root.right);
}

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

В общем чтобы не изобретать велосипед, уже был похожий вопрос.

READ ALSO
Работа инкремента в Java

Работа инкремента в Java

Возник вопрос по поводу работы Java инкремента, я не могу понять логику как он считает его в этих выражения:

152
JTable установка фокуса на ячейку

JTable установка фокуса на ячейку

Есть jtable (10строк 2 столбца), необходимо установить фокус на ячейку (примерно на 5 строку 1 столбца) Как сделать ?

153
пороговый персептрон

пороговый персептрон

Есть класс Перcептрон , для обучения использую данные из массива patterns и answers которые ввожу в ручную , все отлично работаетПри считывании из файла...

128
PhantomJS, Selenium можно ли только часть действий визуализировать

PhantomJS, Selenium можно ли только часть действий визуализировать

Selenium я уже использовал, но мне не совсем подходит то, что я вижу все эти промежуточные страницы и тот факт, что это настолько же медленно, если...

130