Hi,
ich hab mir eine klasse gebaut mit der ich mir einen Binären Baum erstellen und durchsuchen kann. Mein Problem dabei ist das ich bei größeren Datenmengen nen Stackoverflow bekomme und ich hab nicht so wirklich eine idee was ich an meinen programm ändern könnte damit trozdem funktioniert
Die Klasse SetTree darf ich leider nicht benutzen.
Währe cool wenn mir jemand sagen könnte wie ich das teil doch noch zum laufen bekomme.
mfg
Shibas
ich hab mir eine klasse gebaut mit der ich mir einen Binären Baum erstellen und durchsuchen kann. Mein Problem dabei ist das ich bei größeren Datenmengen nen Stackoverflow bekomme und ich hab nicht so wirklich eine idee was ich an meinen programm ändern könnte damit trozdem funktioniert
Java:
package sort;
import core.Daten;
import core.TreeNode;
public class Baum
{
private TreeNode head = null;
private int i = 1;
private Daten[] db = null;
public Baum(Daten[] db)
{
System.out.println("Baum wird erstellt...");
this.db=db;
this.head = new TreeNode(db[0]);
compare(db[i], head);
}
public void compare(Daten element, TreeNode node)
{
System.out.println("i: "+i+" DB: "+(db.length-1));
if( i <= db.length-1)
{
//Wort ist größer als key
if(element.getWort().compareTo(node.getKey().getWort()) > 0)
{
//System.out.println(element.getWort()+" > "+node.getKey().getWort());
//System.out.println("Element nach Rechts");
if(node.getRight()==null)
{
node.setRight(new TreeNode(element));
//System.out.println("eingetragen");
i++;
if( i <= db.length-1)
compare(db[i], head);
}
else
{
compare(element, node.getRight());
}
}
//Wort ist kleiner als key
if(element.getWort().compareTo(node.getKey().getWort()) < 0)
{
//System.out.println(element.getWort()+" < "+node.getKey().getWort());
//System.out.println("Element nach Links");
if(node.getLeft()==null)
{
node.setLeft(new TreeNode(element));
i++;
if( i <= db.length-1)
compare(db[i], head);
}
else
{
compare(element, node.getLeft());
}
}
}
else
{
System.out.println("Baum erstellt");
}
}
public void searchbaum(Daten search, TreeNode node)
{
if(search.getWort().compareTo(node.getKey().getWort()) == 0)
{
System.out.println(">>>>>>>>>>>>>>> "+node.getKey().getWort()+" Gefunden!!!");
}
//Wort ist größer als key
else if(search.getWort().compareTo(node.getKey().getWort()) > 0)
{
System.out.println(search.getWort()+" > "+node.getKey().getWort());
System.out.println("Suche Rechts");
if(node.getRight() !=null)
searchbaum(search, node.getRight());
else
System.out.println("Kein Eintrag für <"+search.getWort()+"> gefunden");
}
//Wort ist kleiner als key
else if(search.getWort().compareTo(node.getKey().getWort()) < 0)
{
System.out.println(search.getWort()+" < "+node.getKey().getWort());
System.out.println("Suche Links");
if(node.getLeft() !=null)
searchbaum(search, node.getLeft());
else
System.out.println("Kein Eintrag für <"+search.getWort()+"> gefunden");
}
if(node.getLeft() == null && node.getRight()== null && search.getWort().compareTo(node.getKey().getWort()) != 0)
{
System.out.println("Kein Eintrag gefunden");
}
}
public TreeNode getHead() {
return head;
}
public void setHead(TreeNode head) {
this.head = head;
}
public int getI() {
return i;
}
public void setI(int i) {
this.i = i;
}
public Daten[] getDb() {
return db;
}
public void setDb(Daten[] db) {
this.db = db;
}
}
Java:
package core;
public class TreeNode
{
private Daten key;
private TreeNode left = null;
private TreeNode right = null;
public TreeNode(Daten e)
{
key = e;
}
// Getter Setter
public Daten getKey() {
return key;
}
public void setKey(Daten key) {
this.key = key;
}
public TreeNode getLeft() {
return left;
}
public void setLeft(TreeNode left) {
this.left = left;
}
public TreeNode getRight() {
return right;
}
public void setRight(TreeNode right) {
this.right = right;
}
}
Die Klasse SetTree darf ich leider nicht benutzen.
Währe cool wenn mir jemand sagen könnte wie ich das teil doch noch zum laufen bekomme.
mfg
Shibas