Suche: Rekursiven Algorithmus zum finden eines Nodes

Unicate

Erfahrenes Mitglied
Hallo alle zusammen!

Die Überschrift ist ein wenig spärlich, deswegen hier mehr:

Ich habe eine Klasse namens TreeNode. Diese Klasse kann mehrere Kind-Nodes haben. Jeder Node kann aus- oder eingeklappt sein. Wenn ein Knoten "ausgeplappt" ist, dann sind seine Kinder zu sehen, wenn nicht, dann nicht hier mal ein Beispiel:

PHP:
		StringNode node = new StringNode("root");
		StringNode n1 = new StringNode("Child 1");
		StringNode n11 = new StringNode("Child 1-1");
		n11.add(new StringNode("Child 1-1-1"));
		n11.add(new StringNode("Child 1-1-2"));
		n11.add(new StringNode("Child 1-1-3"));
		n11.add(new StringNode("Child 1-1-4"));
		n11.add(new StringNode("Child 1-1-5"));
		n11.add(new StringNode("Child 1-1-6"));
		n11.add(new StringNode("Child 1-1-7"));
		n11.add(new StringNode("Child 1-1-8"));
		n11.add(new StringNode("Child 1-1-9"));
		n11.add(new StringNode("Child 1-1-10"));
		StringNode n12 = new StringNode("Child 1-2");
		n12.add(new StringNode("Child 1-2-1"));
		n12.add(new StringNode("Child 1-2-2"));
		n12.add(new StringNode("Child 1-2-3"));
		n12.add(new StringNode("Child 1-2-4"));
//		n11.setExpanded(true);
		n12.setExpanded(true);
		n1.add(n11);
		n1.add(n12);
		n1.setExpanded(true);
		StringNode n2 = new StringNode("Child 2");		
		node.add(n1);
		node.add(n2);
		node.setExpanded(true);
		System.out.println(node.toString());

Dieses Beispiel erzeugte folgende Ausgabe:
Code:
root
	Child 1
		Child 1-1
		Child 1-2
			Child 1-2-1
			Child 1-2-2
			Child 1-2-3
			Child 1-2-4
	Child 2

Nun soll der Node noch eine methode besitzen, die mir den X-ten node in aktueller expand-konfiguration zurückgeben.
Also wenn ich im Beispiel oben eine 0 mit gebe soll, der root node zurückgegeben werden. wenn ich eine 5 mitgebe sollte mir das Child "Child 1-2-2" zurückgegeben werden, bei einer 8 "Child 2" usw.

Ich habe nun schon ein paar Stunden rumversucht und der Tag wird auch nicht jünger.

Hier meine Versuche:

PHP:
public TreeNode getNode(int idx) {
		TreeNode n = null;
		if (idx == 0) {
			return this;
		} else {
			if (isExpanded()) {
				// TreeNode lastNode = null;
				for (TreeNode node : this) {
					if ((n = node.getNode(--idx)) != null) {
						return n;
					}
					// lastNode = node;
				}
				// if (null != lastNode) {
				// idx -= lastNode.getActiveChildren();
				// return getParent().getNode(idx);
				// }
			}
			return null;
		}
	}

Für Hilfe wäre ich sehr dankbar!

[Edit:]
Hab eine Lösung:
PHP:
	public TreeNode getNode(int idx) {
		TreeNode n = null;
		if (idx == 0) {
			return this;
		} else {
			for(TreeNode node : this) {
				int children = node.getActiveChildren();
				if((idx - children) < 2) {
					return node.getNode(idx-1);
				} else {
					idx-=(children+1);
				}
			}
			return null;
		}
	}
 
Zuletzt bearbeitet:
Hey,

benutze beim nächsten Mal bitte JAVA Code Tag, anstatt PHP Tags.

Und du kannst dein Thread/Post auf "erledigt" stellen ;-)

mfg
bo
 
Zurück