Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
List als Rückgabewert einer rekursiven Methode (Baum)
ich hab eine vermutlich nicht sooo schwer zu beantwortende Frage. Hierbei geht es mir vor allem auch um eine "saubere" Lösung meines Problems. Anscheinend hab ich hier irgendwie einen Denkfehler.
Und zwar hab ich folgende rekursive Methode um alle(!) Sub-Komponenten eines Baum-Knotens zu bekommen.
Java:
public List getSubComponents(ContainerComponent node){
List list = new ArrayList();
CompositionComponent comp = null;
Iterator<CompositionComponent> it = node.getSons().iterator();
while (it.hasNext()){
comp = it.next();
list.add(comp);
if (comp.isContainer() == true){
getSubComponents((ContainerComponent)comp);}
}
return list;
}
Diese Methode ist für einen unbalancierten Baum mit n Ästen.
Ok diese Methode gibt mir nun die Subkomponenten des Knotens der darunterliegenden Ebene aus, aber eben nicht die Sub-Komponenten aller darunterliegenden Ebenen (n Level).
Muss ich denn zwangsweise eine Liste die global zur Funktion ist nutzen? Sowas fände ich unschön und ich weiß nicht wie ich nach Methoden-Aufruf garantiere dass die Liste geleert wird.
Andererseits weiß ich nicht wie ich verhindern soll dass "return list;" erst ausgeführt wird wenn sich keine Rekursion mehr durchführen lässt, da hinter jedem Knoten sowohl Container (also andere Knoten) als auch Blätter stecken können.
Du müsstest denke ich, nicht nur [c]getSubComponents((ContainerComponent)comp);}[/c] aufrufen, sondern dieses Ergebnis ja auch noch zur Liste hinzufügen. Da dies ja auch wieder eine Collection(List) zurückgibt, könntest du wenn ich mich jetzt nicht verguckt habe, einfach
Danke.
Wie ichs mir gedacht habe ist die Lösung einfach und plausibel. Keine Ahnung warum ich selbst nich drauf gekommen bin. Als Anfänger hat man desöfteren mal etwas doofe Denkfehler :>
Der Baum ist an sich natürlich sowieso sowieso sehr ineffizient. Die Aufgaben-Stellung gibt aber keine andere gute Lösung her.