Binärbaum implementieren

Status
Nicht offen für weitere Antworten.
S

Smartie86

Gast
Servus. ich muss einen Binärbaum in Java implementieren und diesen mit Generics mit verschiedenen Schlüsseln kompatibel machen.

Meine Problem ist der obligatorische größer/kleiner-Vergleich beim Einfügen/Löschen eines neuen Knotens.
Bei generischen Schlüsseln ist < und > ja nicht definiert.

Ich habe leider keine Ahnung wie man generische Schlüssel auf Größenunterschiede vergleichen kann :/

Ich hatte alles erstmal als int-Baum ausgelegt um überhaupt mal was machen zu können, und nun weiß ich leider mit den generischen Schlüsseln nicht weiter.
Ich schätze mal, daß man da irgndeine Art von comparator benutzen muss, aber ich hab ehrlich gesagt keine Ahnung davon und werde aus der Java Api dafür nicht ganz schlau :(
Hilfe :(




Code:
// Meine Knotenklasse

public class Node<E>
{
	
	Node<E> left;
	Node<E> right;
	Node<E> parent;
	E value;
	
	public Node (E val, Node<E> parent)
	{
		left = right = null;
		this.parent = parent;
	}
	
	public E getValue()
	{
		return value;
	}
}




// Meine Baumklasse

import java.util.*
public class Tree<E> implements Iterable<E>
{

	Node<E> root = null;
	
	enum Order {Preorder, Postorder, Inorder};
	
	private Order order = Order.Preorder;
	
	void setOrder (Order x)
	{ 
		order = x;
	}
	
	.....
	
	public void add(E val)
	{
		if ( root == null ) root = new Node<E> (val, null ) ;
		else add ( root , val ) ;
	}
	
	public void add (Node<E> k, E val)
	{
		if (val < k.value)
		{
			if (k.left == null) k.left = new Node<E>(val, k);
			else add(k.left, val);
		}
		else
		{
			if (k.right == null) k.right = new Node<E> (val, k);
			else add(k.right, val);
		}
	}
	
        ......


	public void delete (E val)
	{
		delete(root,val);
	}
	
	
	public void delete (Node<E> k, E val)
	{
		Node<E> right;
		Node<E> preRight;
		if (k != null)
		{
			if (k.value == val)
			{
				if (k.right == null && k.left == null) k = null;
				else
				{
					if (k.left == null) k = k.right;
					else
					{
						if (k.right == null) k = k.left;
						else
						{
							right = k.left;
							preRight = null;
							while (right.right != null)
							{
								preRight = right;
								right = right.right;
							}
							if (preRight != null)
							{
								preRight.right = right.left;
								right.left = k.left;
							}
							right.right = k.right;
							k = right;
						}
					}
				}

			}
			else
			{
				if (val > k.value)
				{
					delete(k.right, val);
				}
				if (val < k.value)
				{
					delete(k.left, val);
				}
			}
		}		
	}
	
	

}



// meine Main-Klasse


public class TreeMain 
{

	/**
	 * @param args
	 */
	public static void main(String[] args) 
	{
		// TODO Auto-generated method stub
		Tree<Integer> t = new Tree<Integer>();
		t.setOrder(Order.Preorder);
	}

}


Ich habe noch ein kleines Problem dessen ursache mir nicht ganz klar ist: in der main Klasse bei t.setOrder(Order.Preorder) sagt mir eclipse Order cannot be resolved, aber es ist definitiv in der Baumklasse definiert, ich versteh es nicht :(


mfg
Smartie
 
S

Smartie86

Gast
ich hab das jetzt mal so implementiert, aber ob das stimmt müsstet ihr mir sagen. und den Fehler mit dem "order" in der Main finde ich leider nach wie vor nicht :(

Code:
public class Tree<E extends Comparable> implements Iterable<E>, Comparator<E>
{
	
	public int compare(E o1, E o2) {
        return o1.compareTo(o2);


    }
 
G

Gast

Gast
Code:
t.setOrder(t.Order.Preorder)

mach das innere enum static, dann klappts auch ohne Tree objekt.
 
S

Smartie 86

Gast
Bitte bitte bitte hilf mir mal jemand, das mit dem Comparator klappt natürlich garnicht, ich bekomme nur Fehler :(

Hilfe :(
 
G

Guest

Gast
Code:
public class Tree<E extends Comparable> implements Iterable<E>, Comparator<E>

iieeeks was ist denn das? Naja aber jeder hat ja mal klein angefangen ;)

1. Comparable ist ein Interface
2. Du willst doch die Nodes Vergleichen und nicht den Baum, oder? => Comparable in "Node" implementieren!
3. die Methode compareTo musst du selbst implementieren, also sowas wie "Knoten a ist kleiner als Knoten B wenn value von A kleiner ist"
4. Warum implementierst du Iterable? Bzw. wo ist die Implementation?
5. Was ist E?[/code]
 
S

Smartie86

Gast
Anonymous hat gesagt.:
2. Du willst doch die Nodes Vergleichen und nicht den Baum, oder? => Comparable in "Node" implementieren!
Das problem ist, daß der Baum für beliebige Schlüssel nutzbar sein soll. Was mach ich jetzt Wenn jemand auf die idee kommt ein Objekt wie z.B. "Buch" zu übergeben. Sowas kann ich doch unmöglich voraussehen, geschweigedenn Vergleichsmethoden dazu im Vorraus implementieren.

Anonymous hat gesagt.:
3. die Methode compareTo musst du selbst implementieren, also sowas wie "Knoten a ist kleiner als Knoten B wenn value von A kleiner ist"
Ok.

Anonymous hat gesagt.:
4. Warum implementierst du Iterable? Bzw. wo ist die Implementation?



Code:
	public enum Order {Preorder, Postorder, Inorder};
	
	private Order order = Order.Preorder;

public Iterator<E> iterator()
	{ 
    	return genArrayList().iterator();	
	}   
	
	public ArrayList<E> genArrayList()
	{
	   	 ArrayList<E> list = new ArrayList<E>(countNodes());
	   	 switch (order)
	   	 {
	   	   case Preorder:   preOrder(list);   break;
	   	   case Postorder:  postOrder(list);  break;
	   	   case Inorder:    inOrder(list);    break;
	   	 }
	   	 return list;
	}

Anonymous hat gesagt.:
Ein Platzhalter für den späteren Typus? Oder ist das auch falsch?

:( Ich seh schon, ich hab nicht die geringste Ahnung was ich hier tue.
 
G

Guest

Gast
Hab nicht viel Zeit (hab auch deinen ersten post noch immer nicht ganz durchgelesen, sorry), daher nur kurz:
Erzwinge als Typ "Compareable", also statt E => Compareable
Damit ist sichergestellt das alle Klassen die verendet werden Compareable implementieren, du kannst dann also unbesorgt compareTo aufrufen
Schwierig wirds nur wenn mehrere VERSCHIEDENE Klassen gleichzeitig verwendet werden sollen, denn wie vergleicht man Buch A mit Fernseher B? Was ist größer bzw. kleiner?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Binärbaum mit java implementieren! Java Basics - Anfänger-Themen 5
P einen binärbaum implementieren Java Basics - Anfänger-Themen 4
Y Wie greift man auf die Knoten in einem Binärbaum zu? Java Basics - Anfänger-Themen 5
T Binärbaum-Suche Implementation Java Basics - Anfänger-Themen 6
A Binärbaum rekursiv durchsuchen und Referenz zurückgeben Java Basics - Anfänger-Themen 4
D Werte aus einem BinärBaum in einem Array speichern Java Basics - Anfänger-Themen 1
D Binärbaum Blätter finden und Ausgeben Java Basics - Anfänger-Themen 22
O BinärBaum einfügen Java Basics - Anfänger-Themen 13
E Erste Schritte Testklasse Binärbaum Java Basics - Anfänger-Themen 10
void19 Methoden Binärbaum Inorder Traversierung in Array speichern Java Basics - Anfänger-Themen 1
A Größten Eintrag aus Binärbaum löschen Java Basics - Anfänger-Themen 4
L Ganzen BinärBaum ausgeben? Java Basics - Anfänger-Themen 3
L Binärbaum (Stammbaum) Java Basics - Anfänger-Themen 8
S Binärbaum in PreOrder in ArrayList speichern Java Basics - Anfänger-Themen 0
J Methoden Binärbaum, Traversierung in Array speichern Java Basics - Anfänger-Themen 18
K BinärBaum Java Basics - Anfänger-Themen 4
J Max. Anzahl von Knoten im Binärbaum Java Basics - Anfänger-Themen 3
M Werte der Knoten in Binärbaum addieren (iterativ) Java Basics - Anfänger-Themen 6
C Binärbaum mit grafischer Ausgabe Java Basics - Anfänger-Themen 0
J Binärbaum formatiert ausgeben. Java Basics - Anfänger-Themen 7
P Listen sortieren mit Binärbaum gibt keine Ausgabe ab 10000 Integern Java Basics - Anfänger-Themen 14
E Binärbaum - von rekursiv zu iterativ Java Basics - Anfänger-Themen 10
W Größtes Element im unsortierten Binärbaum Java Basics - Anfänger-Themen 7
N Generischer Binärbaum - löschen Java Basics - Anfänger-Themen 1
M Binärbaum mit parent-Zeigern Java Basics - Anfänger-Themen 1
B Methoden BinärBaum als String Knoten löschen Java Basics - Anfänger-Themen 5
S Binärbaum kopieren Java Basics - Anfänger-Themen 6
D Binärbaum Suche Java Basics - Anfänger-Themen 5
D Binärbaum probleme Java Basics - Anfänger-Themen 4
P Binärbaum - Primärschlüssel Java Basics - Anfänger-Themen 3
X Fehler Binärbaum Java Basics - Anfänger-Themen 6
PaulG Fragen zu Binärbaum Java Basics - Anfänger-Themen 21
N Binärbaum/Implementierung Java Basics - Anfänger-Themen 9
P Binärbaum Ordnungsproblem Java Basics - Anfänger-Themen 8
P Generischer Binärbaum (compareTo Frage) Java Basics - Anfänger-Themen 4
M Binärbaum - Problem bei Knoten anhängen / löschen Java Basics - Anfänger-Themen 5
B Binärbaum höhe herausfinden Java Basics - Anfänger-Themen 12
L Rot Scharz Baum von Binärbaum erben Java Basics - Anfänger-Themen 9
S Klassen Aufgabe: Binärbaum überprüfen Java Basics - Anfänger-Themen 16
S Binärbaum Java Basics - Anfänger-Themen 9
S Variable Parameterliste in Binärbaum Java Basics - Anfänger-Themen 2
N BinärBaum Hilfestellung Java Basics - Anfänger-Themen 8
S Binärbaum prüfen, ob sortiert oder unsortiert Java Basics - Anfänger-Themen 6
W Binärbaum zahlen addieren Java Basics - Anfänger-Themen 7
S Binärbaum - Klasse Knoten - Methode Suchen Java Basics - Anfänger-Themen 5
S Binärbaum Java Basics - Anfänger-Themen 7
I Binärbaum Java Basics - Anfänger-Themen 5
S Bitte um Hilfe beim unsortierten Binärbaum!! Java Basics - Anfänger-Themen 6
J Binärbaum getSize Java Basics - Anfänger-Themen 4
P Fragen zum Binärbaum Java Basics - Anfänger-Themen 3
K Tiefe im Binärbaum Java Basics - Anfänger-Themen 2
G generischer binärbaum Java Basics - Anfänger-Themen 9
G Binärbaum und Wrapperklassen Java Basics - Anfänger-Themen 6
F Binärbaum codieren. Codeproblem! Java Basics - Anfänger-Themen 4
D rekursion im binärbaum Java Basics - Anfänger-Themen 11
0 Binärbaum als verkettete Liste Java Basics - Anfänger-Themen 3
T Binärbaum - noch ein "klitzekleiner Fehler" Java Basics - Anfänger-Themen 4
B Binärbaum auf Vollständigkeit prüfen Java Basics - Anfänger-Themen 15
G Frage zur einfügen in einem Binärbaum Java Basics - Anfänger-Themen 21
G Binärbaum grafisch darstellen Java Basics - Anfänger-Themen 4
Maxq Klassen Actionen in Button implementieren Java Basics - Anfänger-Themen 6
A LinkedList implementieren Java Basics - Anfänger-Themen 32
_so_far_away_ Inventarisierungssystem brauche switch Cases und weiß nicht, wie ich e implementieren muss Java Basics - Anfänger-Themen 5
new_to_coding Rekursive Reihe implementieren Java Basics - Anfänger-Themen 1
HolyFUT Javax Websocket API implementieren Java Basics - Anfänger-Themen 14
J Interface Interface korrekt implementieren Java Basics - Anfänger-Themen 5
M Wie kann ich eine Methode aus einem Interface in eine Klasse implementieren, so dass sie ihre Funktion ausführt? Java Basics - Anfänger-Themen 7
P9cman Ampel in Java implementieren Java Basics - Anfänger-Themen 3
districon Generics implementieren Java Basics - Anfänger-Themen 2
W UML Diagramm implementieren Java Basics - Anfänger-Themen 2
tony241188 Implementieren Sie die Klasse Hersteller, welche die folgenden Elektrogeräte produziert Java Basics - Anfänger-Themen 3
R Taxistand Implementieren Java Basics - Anfänger-Themen 1
CptK Generics: Klassen die Interface implementieren, aber selbst nicht das Interface sind Java Basics - Anfänger-Themen 8
Gaudimagspam BMI in Java implementieren Java Basics - Anfänger-Themen 38
T Methode implementieren Java Basics - Anfänger-Themen 21
R Implementieren einer iterativen und rekursiven Klassenmethode. Java Basics - Anfänger-Themen 1
L Methode implementieren, Parameter die übergeben werden sind final Java Basics - Anfänger-Themen 4
J alternierendes Probing-Verfahren für Hash-Tabellen implementieren Java Basics - Anfänger-Themen 0
B UML-Klassendiagram get und set implementieren Java Basics - Anfänger-Themen 2
M Implementieren einer Datenstruktur, welche nur 5 Objekte speichert Java Basics - Anfänger-Themen 3
U Hashmap Iterator selbst implementieren Java Basics - Anfänger-Themen 10
E Klassen implementieren Java Basics - Anfänger-Themen 94
S Tokenizer selbst implementieren Java Basics - Anfänger-Themen 1
C Telefonliste mit interface implementieren Java Basics - Anfänger-Themen 30
L Klassen Kann eine Unterklasse einer abstrakten Klasse ein Interface implementieren? Java Basics - Anfänger-Themen 2
B Doppelt verkettete Liste implementieren Java Basics - Anfänger-Themen 8
M WindowStateListener selbst implementieren Java Basics - Anfänger-Themen 8
J Algorithmus für eine Reihe implementieren Java Basics - Anfänger-Themen 2
F Kindklassen sollen Ihre Methoden selbst implementieren Java Basics - Anfänger-Themen 5
pkm Interface Funktionales Interface lässt sich nicht implementieren. Java Basics - Anfänger-Themen 2
N Verkettete Liste implementieren Java Basics - Anfänger-Themen 5
N Stacks und Queues Implementieren Java Basics - Anfänger-Themen 2
R Listen richtig implementieren Java Basics - Anfänger-Themen 3
Shizmo Methoden Formel besser implementieren Java Basics - Anfänger-Themen 8
X Polynome implementieren Java Basics - Anfänger-Themen 3
O Methoden implementieren, Sichtbarkeiten, Brüche Java Basics - Anfänger-Themen 104
D Erste Schritte Weitere Befehle implementieren Java Basics - Anfänger-Themen 27
D Erste Schritte Befehl back implementieren Java Basics - Anfänger-Themen 18
B Formel in Java implementieren Java Basics - Anfänger-Themen 4
M Suchbaum implementieren Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben