обход бинарного дерева на java

Модератор: Модераторы разделов

Аватара пользователя
cheer
Сообщения: 729
Статус: Самовлюблённый сноб
ОС: archlinux i686-current

обход бинарного дерева на java

Сообщение cheer »

Надо обойти дерево в симметричном порядке (от меньшего к большему). С рекурсией задача при огромных деревьях (около 10000 узлов) выдаёт

Код: Выделить всё

Exception in thread "main" java.lang.StackOverflowError

Видимо, надо либо увеличить стек, либо написать обход нерекурсивно. Но вот алгоритм симметричного обхода двоичного дерева без рекурсии мне неизвестен... Хотя, конечно, буду рад, если кто укажет способ увеличить стэк.
Прилагаю ещё код, ошибка вполне может быть и в нём...

Код: Выделить всё

protected void traverseAndStoreToBuffer(TreeNode node) {
        if (node != null) {
            traverseAndStoreToBuffer(node.left);
            try {
                dos.writeBytes(node.term);
            dos.write(
                zeroBuffer,
                0,
                ApplicationSetup.STRING_BYTE_LENGTH - node.term.length());
            dos.writeInt(node.termCode);
            dos.writeInt(node.frequency);
            dos.writeInt(node.blockFrequency);
            dos.writeInt(0);
            dos.writeLong(0);
            dos.writeByte(0);
            } catch (IOException e) {
                e.printStackTrace();
                System.exit(1);
            }
            traverseAndStoreToBuffer(node.right);
        }
    }

Вызывается сей метод в этом же классе, если корень не null.

я болван.
-Xss1024M и всё в поряде.
Спасибо сказали:
d_n_k
Сообщения: 636
ОС: Gentoo GNU/Linux

Re: обход бинарного дерева на java

Сообщение d_n_k »

там http://khpi-iip.mipk.kharkiv.edu/library/d...book/prt06.html есть какие-то алгоритмы нерекурсивного обхода дерева.
все сказанное есть имхо...
Спасибо сказали: