Я пытался преобразовать рекурсивную программу в нерекурсивную программу. Цель программы - обход структуры данных.
Пожалуйста, найдите ниже структуру данных
class Node {
}
class LeafNode extends Node {
private int leafNodeValue;
public LeafNode (int leafNodeValue) {
this.leafNodeValue= leafNodeValue;
}
public int getLeafNodeValue() {
return leafNodeValue;
}
public void setLeafNodeValue(int leafNodeValue ) {
this.leafNodeValue = leafNodeValue;
}
}
class NonLeafNode extends Node {
private List<Node> nodeList = new ArrayList<>();
public List<Node> getNodeList() {
return nodeList ;
}
public void setNodeList(List<Node> nodeList) {
this.nodeList = nodeList;
}
}
Вот мой рекурсивный класс обхода узлов, который мне не удается переписать нерекурсивно.
Класс рекурсивного обхода
public class RecursiveTraversal {
public static void main (String[] args ) {
NonLeafNode node1 = new NonLeafNode();
NonLeafNode node2 = new NonLeafNode();
node2.getNodeList().add(new LeafNode(1));
NonLeafNode node3 = new NonLeafNode();
node3.getNodeList().add(new LeafNode(2));
node2.getNodeList().add(node3);
NonLeafNode node4 = new NonLeafNode();
node4.getNodeList().add(new LeafNode(3));
node1.getNodeList().add(node2);
node1.getNodeList().add(node4);
node1.getNodeList().add(new LeafNode(4));
for (Node nodeItem : node1.getNodeList())
traverse(nodeItem);
}
public static void traverse (Node node) {
if (node instanceof LeafNode)
System.out.println(" Leaf Node " + ((LeafNode) node).getLeafNodeValue());
else if (node instanceof NonLeafNode)
for (Node nodeItem: ((NonLeafNode) node).getNodeList())
traverse(nodeItem);
}
}
Результат программы должен быть 1,2,3,4.
Может ли кто-нибудь помочь мне написать итеративную версию вышеуказанной программы?
да, мой класс верхнего уровня - это RecursiveTraversal, все остальные классы содержатся в том же файле, я могу выполнить вывод программы, мог сделать некоторую ошибку при вводе текста в браузере, но в основном он должен работать с небольшими изменениями.
У вас много ошибок компиляции. Исправьте и ждите помощи. Никто не должен исправлять вашу ошибку. Ваш вопрос касается итеративной логики, но код не работает.
Шаг 1. Определите, что ваш рекурсивный метод - это Поиск в глубину. --- Шаг 2. Поищите в Интернете, как это сделать без рекурсии: non-recursive depth first search
удалены все ошибки компиляции, пожалуйста, проверьте сейчас
Андреас, для меня работа по поиску в глубину, спасибо




Чтобы сделать его итеративным, просто используйте цикл while или for.
Так что-то вроде:
while(getLeafNode() != null) {
// etc
}
Также:
prvate int leafNodeValue;
Наверное, частное должно быть, а не првате?
class Node() { ... }это правильно в java?