002
22.06.2008, 11:59 Uhr
~B.Nutzer
Gast
|
Du rufst getPathToGoal zwar rekrusiv auf, uebernimmst dessen Rueckgabewert aber "blind". Zudem fuegst du "root", also das aktuelle Element, nur dann in die Liste ein, wenn es das Ziel ist. Das fuehrt dazu das getPathToGoal immer nur das Ziel-Objekt zurueckgibt.
Mein Code wuerde etwa so aussehen. (Wichtig: Ich habe den Code weder getestet noch bewiesen das er funktioniert ;-) )
C++: |
public static List<Object> getPathToGoal(ITreeNode root, Object goalNode) { LinkedList<Object> i = new LinkedList<Object>(); if(root.getValue().equals(goalNode)) { i.add(root.getValue().toString()); return i; } Iterator<ITreeNode> it = root.getChildren().iterator(); while (it.hasNext()) { List<Object> path = getPathToGoal((ITreeNode) it.next(), goalNode); if(path != null) { // ist path der "richtige" Weg? i.add(root.getValue().toString()); i.addAll(path); return path; } } return null; // Dieser Weg fuehrt nicht zum Ziel. }
|
P.S: Du kannst natuerlich List<Object>, Iterator<ITreeNode>, etc. durch List, Iterator und Co. ersetzen, solltest du das wollen oder gar muessen (falls du z.B. noch Java < 1.5 verwendest oder ITreeNode nicht anpassen darfst). |