# Jung - BinarySearchTree



## cz3kit (18. Sep 2011)

Halli hallo an alle,

ich arbeite gerade mit JUNG und versuchen damit einen Binary Search Tree zu erstellen. Hat jemand sowas mit JUNG schon gemacht? 
Ich habe gerade das Problem, dass das Hinzufügen der Knoten nicht so abläuft, wie es in solch einem Tree sein sollte.

Beispiel: 100 ist Root. Wenn ich als nächstes die 150 hinzufüge, wird es zum Kind der 100. Wenn ich als nächstes 50 hinzufüge, dann wird es ebenfalls zum Kind der 100, aber der Tree sieht dann so aus:

......100  
....../....\ 
....150...50   
und so soll das ja nicht aussehen.

Das Problem ist, dass ich einfach keine Lösung finde, wie man der 50 sagen könnte, dass sie auf die linke Seite gehen soll. (Kleine Werte links, größere Werte rechts.) Ich hoffe ihr versteht was ich meine.

Grüße


----------



## Marcinek (18. Sep 2011)

Noch nie was von JUNG gehört ;D aber das muss nix heißen.

Aber ohne Code, kaNN man hier nicht helfen.


----------



## cz3kit (18. Sep 2011)

Ich kann man etwas Code reinstellen, aber ich weiß nicht ob das was hilft.


```
import java.awt.Dimension;
import java.awt.geom.Point2D;

import javax.swing.JFrame;

import edu.uci.ics.jung.algorithms.layout.TreeLayout;
import edu.uci.ics.jung.graph.DelegateTree;
import edu.uci.ics.jung.visualization.BasicVisualizationServer;
import edu.uci.ics.jung.visualization.decorators.ToStringLabeller;

public class BinarySearchTreeTEST {

	public static void main(String[] args){
		DelegateTree<Integer, String> g = new DelegateTree<Integer, String>();
		g.setRoot(100);
		g.addChild("Edge1", g.getRoot(), 50);
		g.addChild("Edge4", 50, 40);
		g.addChild("Edge2", g.getRoot(), 70);
		g.addChild("Edge3", g.getRoot(), 80);
		
		
		TreeLayout<Integer, String> layout = new TreeLayout<Integer, String>(g);
		//layout.setLocation(40, new Point2D.Double());
		
		
		
		BasicVisualizationServer<Integer, String> vv = new 
			BasicVisualizationServer<Integer, String>(layout);
		
		vv.setPreferredSize(new Dimension(350, 350));
		//Beschriftung
		vv.getRenderContext().setVertexLabelTransformer(new 
				ToStringLabeller<Integer>());
		// Sets the viewing area size
		JFrame frame = new JFrame("Simple Graph View");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.getContentPane().add(vv);
		frame.pack();
		frame.setVisible(true);
	}
}
```

Jung kann man hier downloaden. Ich vermute, dass das mit dem TreeLayout zu tun hat, aber da bin ich mir auch nicht ganz sicher. Meine erste Idee war, dass ich mit immer die Location vom Parent besorge und damit dann das Child ausrichten kann, aber leider hab ich nichts gefunden, womit ich die Position eines Parents holen könnte.


----------



## Landei (18. Sep 2011)

Der DelegateTree scheint für sowas einfach ungeeignet zu sein. Er ist für allgemeine Bäume, hat also z.B. noch nicht einmal ein Konzept von "linken" und "rechtem" Kind. Du müsstest das Einordnen also selbst übernehmen, aber auch das Suchen. Das Einfachste wäre wirklich eine eigene Implementierung eines Binärbaumes. Der könnte dann auch eine Methode haben, um einen DelegateTree auszuspucken, wenn du den unbedingt zur Visualisierung brauchst.


----------



## cz3kit (18. Sep 2011)

Meine Hoffung war, das jemand es vielleicht schon gemacht hat. Naja, werde dann selber was machen müssen. Wenn jemand Ideen oder ggf. eine Lösung hat, dann immer her damit  Vielleicht lässt sich was daraus basteln.


----------



## Marco13 (18. Sep 2011)

Bin gerade nicht sicher... aber... ein Baum hat erstmal kein "Links" und "Rechts" und "Oben" und "Unten". Ein Baum ist nur eine Datenstruktur. Wenn das so angezeigt wird, wie man es kennt, ist das ein "Dendrogramm" und wie genau das aussieht, hängt eigentlich vom Layout ab. Aber vielleicht müßte ich mir da die Spezifika von JUNG mal genauer anschauen, hab damit noch nicht viel gemacht.


----------



## Landei (18. Sep 2011)

Des einen Freud, des andern Jung...

(sorry, Psychologen-Witz)


----------



## cz3kit (18. Sep 2011)

@Marco13  Hier ein Bild was ich mit Links und Rechts meine:


----------



## Marco13 (18. Sep 2011)

Grob sowas hab ich mir schon gedacht. Ich wollte nur darauf hinaus, dass das Links und Rechts ja nicht eine Sache der Datenstruktur ist, sondern NUR(?) des Layouts (müßte mir aber ggf. die Klasse in JUNG mal näher ansehen)


----------

