Ich soll für die UNI gucken, ob in einem Baum ein anderer Baum komplett vorhanden ist.
Hab mir paar Gedanken gemacht, aber komme nicht wirklich auf eine Lösung! istTEilbaum soll den wiedergabewert Knoten liefern in dem der Knoten steht an dem der Baum anfängt...
Hier mein Code (es geht bestimmt super einfach und ich habe zuviel nachgedacht ):
Achja, der zählt auch durch, doch am Ende sagt er wieder, dass noch X Knoten gebraucht werden...
Hab mir paar Gedanken gemacht, aber komme nicht wirklich auf eine Lösung! istTEilbaum soll den wiedergabewert Knoten liefern in dem der Knoten steht an dem der Baum anfängt...
Hier mein Code (es geht bestimmt super einfach und ich habe zuviel nachgedacht ):
Code:
///// PROGRAMM BAUM /////
////--------------------------------------/////
public class b4kg
{
///// KLASSSE MAIN /////
/////--------------------------------/////
public static void main (String [] egal)
{
//erstelle Baum 1
Knoten b1_k1 = new Knoten(2);
Knoten b1_k2 =new Knoten(507,new Knoten(11),new Knoten(-103));
Knoten b1_wurzel = new Knoten (-3, b1_k1, b1_k2);
Baum b1 = new Baum (b1_wurzel);
//erstelle Baum 2
Knoten b2_k1 = new Knoten(15, new Knoten(23), new Knoten(80));
Knoten b2_k2 = new Knoten(11, new Knoten(5), new Knoten(3));
Knoten b2_k3 = new Knoten(507, b2_k2, new Knoten(-103));
Knoten b2_k4 = new Knoten(-3, new Knoten(2), b2_k3);
Knoten b2_k5 = new Knoten(93, b2_k4, new Knoten (-2));
Knoten b2_wurzel = new Knoten (-3, b2_k1, b2_k5);
Baum b2 = new Baum(b2_wurzel);
//Kontrolliere, ob es ein Teilbaum ist
Knoten pos = b2.istTeilbaum(b1);
//Ausgabe der Stelle bzw. Null
if (pos != null)
{
System.out.println("\nAm Knoten mit der Zahl: "+pos.Zahl);
}
else
{
System.out.println("null");
}
}
}
///// Klasse Baum /////
/////---------------------------------/////
class Baum
{
Knoten Wurzel;
Baum (){Wurzel = null;}
Baum (Knoten Wurzel) {this.Wurzel = Wurzel;}
int eInB()
{
return eInB(0, Wurzel);
}
int eInB(int x, Knoten k)
{
if (k != null)
{
x++;
x = eInB(x, k.links);
x = eInB(x, k.rechts);
}
return x;
}
// METHODE TEILBAUM //
//------------------//
Knoten istTeilbaum(Baum uBaum)
{
Knoten uK = uBaum.Wurzel; int equal = 0; Knoten pos = null;
return istTeilbaum(uBaum, uBaum.eInB(), equal, Wurzel, uK, pos);
}
// METHODEN "Konstruktor"//
//-----------------------//
Knoten istTeilbaum(Baum uBaum, int x, int equal, Knoten k, Knoten uK, Knoten pos)
{
if (uK != null && k != null)
{
if (uK.Zahl != k.Zahl)
{
pos = null;
System.out.println("X1 Es muessen noch: "+(x)+" Richtige da sein!");
System.out.println("---------------------------------------------");
if (k.links != null)
{
pos = istTeilbaum(uBaum, x, 0, k.links, uBaum.Wurzel, pos);
}
if (k.rechts != null)
{
pos = istTeilbaum(uBaum, x, 0, k.rechts, uBaum.Wurzel, pos);
}
return pos;
}
else
{
equal++;
if (equal == 1)
{
pos = k;
}
System.out.println("X2 Es muessen noch: "+(x-equal)+" Richtige da sein!");
if (k.links != null)
{
pos = istTeilbaum(uBaum, x, equal, k.links, uK.links, pos);
}
if (k.rechts != null)
{
pos = istTeilbaum(uBaum, x, equal+1, k.rechts, uK.rechts, pos);
}
return pos;
}
}
return pos;
}
}
///// Klasse Knoten /////
/////------------------------------/////
class Knoten
{
int Zahl; Knoten links, rechts;
Knoten (int Zahl){this.Zahl = Zahl; links = rechts = null;}
Knoten (int Zahl, Knoten links, Knoten rechts)
{
this.Zahl = Zahl; this.links = links; this.rechts = rechts;
}
}
Achja, der zählt auch durch, doch am Ende sagt er wieder, dass noch X Knoten gebraucht werden...