Итерация по структуре узлов без родителей

У меня есть структура узла, у каждого узла есть дочерние узлы, но нет родительского узла. Мне нужно перебрать эту структуру, собирая информацию в 3 двойника. Поскольку у java нет ссылок, я не могу использовать рекурсию, если не создам класс для этих двойников, а также я не могу сделать это без рекурсии, поскольку узлы не имеют родителей.

Есть ли способ сделать это в java без изменения структуры или создания другого класса?

Структура:

public class Skeleton
{

    public Vector2D head;
    public int numberOfNodes;
    public Skeleton[] nodes;
    public int skeletonSize;
    public Color color;
...
}

person Vladp    schedule 04.11.2012    source источник
comment
Я не понимаю вашей проблемы. Показ фактической структуры ваших узлов может помочь.   -  person Luiggi Mendoza    schedule 05.11.2012
comment
Вы можете использовать шаблон Visitor, но для этого потребуется добавить как минимум еще один класс и еще один метод.   -  person millimoose    schedule 05.11.2012
comment
Вы можете абсолютно использовать рекурсию в Java.   -  person Matt Ball    schedule 05.11.2012
comment
Вы можете абсолютно использовать рекурсию в Java. - не сказал иначе.. у java нет ссылок?? - сюрприз! вы не можете передать int функции, используя ref (например, в С++ или С#)   -  person Vladp    schedule 05.11.2012
comment
Если узлы находятся в Skeleton[] nodes, вы можете перебрать этот массив и получить данные. В чем настоящая проблема?   -  person Luiggi Mendoza    schedule 05.11.2012
comment
@Vladp В Java есть ссылки; вы запрашиваете очень конкретный вид ссылки. Если вы хотите передать int по ссылке, вы можете передать одноэлементный int[]. Во-вторых, в Java ничего не делается без штамповки классов. Когда класс — единственный инструмент, который у вас есть, все решает еще один класс. Если вас беспокоит резкое увеличение количества файлов, создайте private static классов или включите в один файл несколько определений классов верхнего уровня, принадлежащих пакету.   -  person Marko Topolnik    schedule 05.11.2012
comment
@Marko Topolnik, извините, я имел в виду синтаксис ref из c/c++/c#, но этого вполне достаточно.   -  person Vladp    schedule 05.11.2012


Ответы (1)


Если вы заявите:

double[] results = new double[3];

results будет указателем на трехэлементный массив двойников. Вы можете передавать его во время рекурсии и изменять элементы по мере необходимости.

Однако не бойтесь создавать дополнительные классы в Java. Вы можете объявить класс внутри одного из ваших других классов для локального использования.

person Patricia Shanahan    schedule 04.11.2012