Algorithmus 2 Binärbäume vergleichen

Status
Nicht offen für weitere Antworten.

NataLi

Mitglied
Hallo Leute,
sitze nun schon seit Stunden an dem folgenden Problem:
Ich muss ein Binärbaum mit einem anderen vergleichen.
Hier der Code für die Bäume:
Code:
public class SortedBinTree {
		int value;
		SortedBinTree left;
		SortedBinTree right;
		
	SortedBinTree (SortedBinTree left,int value,SortedBinTree right) {
		this.value = value;
		this.left = left;
		this.right = right;}}
Mir fehlt die zündende Idee wie man es anstellen soll...
Hat jemand nen Tip für mich?
 

Kim Stebel

Bekanntes Mitglied
prüfen, ob die value felder gleich sind, dann rekursiv prüfen, ob left und right gleich sind. natürlich nicht vergessen, left und right auf null zu prüfen.
 

NataLi

Mitglied
Ich komme leider trotzdem nicht weiter. Habe genau mit der Rekursion meine Probleme....
Code:
public boolean vergleiche(SortedBinTree baum){
		boolean wahr=false;
		if(this.value==baum.value) wahr=true;
			if (vergleiche(baum.left))wahr=true;
				if (vergleiche(baum.right)){wahr=true;};
				
				return wahr;
 

Kim Stebel

Bekanntes Mitglied
statt

Code:
if (vergleiche(baum.left))wahr=true;
musst du
Code:
if (left.vergleiche(baum.left))wahr=true;
schreiben! ich denke es ist klar warum, oder? das selbe natürlich für right. Ja und dann fehlt nur noch, dass du vorher auf null prüfst. beide null =>true, nur einer =>false.
 

NataLi

Mitglied
Es tut mir leid, aber bin wohl schwer vom Begriff...
Code:
public boolean vergleiche(SortedBinTree baum){
		boolean wahr=false;
			if(this.value==baum.value) wahr=true;
/*HIER?*/		if((this.left==null)&(baum.left==null))wahr=true;
					if((this.right==null)&(baum.right==null))wahr=true;
						if (left.vergleiche(baum.left))wahr=true; 
							if (right.vergleiche(baum.right))wahr=true; 

			
				
				return wahr;
 

Kim Stebel

Bekanntes Mitglied
*händeübermkopfzusammenschlag*
wie schaffst du es in so wenig codezeilen so viele fehler zu machen? warum diese komische indentierung?
also noch mal:
am anfang "wahr" auf true setzen, dann folgendes prüfen, und gegebenenfalls wahr auf false setzen:
baum==null
value!=baum.value
left==null &&baum.left!=null
right==null && baum.right != null
!left.vergleiche(baum.left)
!right.vergleiche(baum.right)

ach übrigens...ich gebe auch nachhilfe in java und anderen Informatikthemen...;)
 

NataLi

Mitglied
Ich weiss nicht, was ich falsch mache....Diese Rekursion ist sehr schwer zu begreifen...Meiner Freundin geht es genauso...
Code:
public boolean vergleiche(SortedBinTree baum){
			
		boolean wahr = true;
		if(baum==null) 
		if(value!=baum.value) 
		if((left==null) && (baum.left!=null)) 
		if((right==null) && (baum.right != null)) 
		if(!left.vergleiche(baum.left))
		if(!right.vergleiche(baum.right))
		
			return wahr;
			
		else {wahr=false;}
		return wahr;
Code:
class Aufgabe {
	 		
public static void main (String []args)throws CloneNotSupportedException {
		
SortedBinTree d =  new SortedBinTree(null,2, null);
SortedBinTree e =  new SortedBinTree(null,7,null);
SortedBinTree f =  new SortedBinTree(null,15,null);
SortedBinTree g =  new SortedBinTree(null,19,null);
SortedBinTree b =  new SortedBinTree(d,5,e);
SortedBinTree c =  new SortedBinTree(f,18,g);
SortedBinTree a = new SortedBinTree(b,10,c);

SortedBinTree d1 =  new SortedBinTree(null,2, null);
SortedBinTree e1 =  new SortedBinTree(null,7,null);
SortedBinTree f1 =  new SortedBinTree(null,15,null);
SortedBinTree g1 =  new SortedBinTree(null,19,null);
SortedBinTree b1 =  new SortedBinTree(d1,5,e1);
SortedBinTree c1 =  new SortedBinTree(f1,18,g1);
SortedBinTree a1 = new SortedBinTree(b1,10,c1);

System.out.println("Vergleich gelungen? "+ a.vergleiche(a1));
 

Marco13

Top Contributor
Um Rekursion zu begreifen, muss man zuerst Rekursion begreifen. *brüller*
Naja.

Bei (dieser Art von) Rekursion hat man eigentlich immer...
1. Basisfälle: Fälle, wo das Ergebnis "trivial" ist, und man es einfach zurückgeben kann
2. Die Rekursion: Man teilt das Problem auf, und versucht die (einfacheren) Teilprobleme zu lösen.

Wenn man zwei Bäume mit Wurzelknoten A und B vergleichen will, hat man dann auch hier...:

1. Basisfälle:
Wenn A und B beide 'null' sind, dann sind die Bäume gleich
Wenn entweder A oder B 'null' sind (aber nicht beide), dann sind die Bäume NICHT gleich
Wenn A.value != B.value ist, dann sind die Bäume NICHT gleich

2. Die Rekursion:
Wenn keiner der Basisfälle zutrifft, UND
- die Bäume mit den Wurzelknoten A.left und B.left gleich sind UND
- die Bäume mit den Wurzelknoten A.right und B.right gleich sind
dann sind die Bäume gleich.


Wenn man dass im Pseudocode hinschreibt, hat man schon sowas wie
Code:
boolean sindGleich(Node A, Node B)
{
    if (A == null && B == null) return true; // Beide sind 'null' - sie sind gleich
    if (A == null && B != null) return false; // Ein Knoten ist null, der andere nicht -> NICHT gleich
    if (A != null && B == null) return false; // Ein Knoten ist null, der andere nicht -> NICHT gleich
    if (A.value != B.value) return false; // Unterschiedliche Werte -> NICHT gleich

    // Wenn man hier angekommen ist, hat man zwei Knoten mit gleichen Werten. 
    // Jetzt die Rekursion für die linken und rechten Nachfolger:
    return (sindGleich(A.left, B.left) && sindGleich(A.right, B.right));
}
Hm. Das ist schon fast kein "Pseudo" code mehr :roll: Naja.
 
B

Beni

Gast
NataLi hat gesagt.:
Ich weiss nicht, was ich falsch mache....Diese Rekursion ist sehr schwer zu begreifen...Meiner Freundin geht es genauso...
Dein Problem liegt auch an deiner sparsamen Schreibweise. Mach ein paar Klammern und korrekte Einrückung, dann sieht die Welt schon besser aus.

Wenn man das macht, kommt folgendes raus. Kann das stimmen?
Code:
public boolean vergleiche(SortedBinTree baum){
			
		boolean wahr = true;
		if(baum==null){
		  if(value!=baum.value){
		    if((left==null) && (baum.left!=null)){
		      if((right==null) && (baum.right != null)){
		        if(!left.vergleiche(baum.left)){
		          if(!right.vergleiche(baum.right)){
		            return wahr;
		          }
		          else {
		            wahr=false;
		          }
		        }
		      }
		    }
		  }
		}
		return wahr;
}

Nein! Dann machen wir es doch Schritt für Schritt...
Code:
public boolean vergleiche(SortedBinTree baum){
		if(baum==null){
		  // ne, wohl nicht richtig
		  return false;
		}

		if(value!=baum.value){
		  // wahrscheinlich auch falsch
		  return false;
		}

		if(!left.vergleiche(baum.left)){
		  // wenn die linken nicht gleich sind, ist es wohl falsch
		  return false;
		}

		// etc etc...
}
 

Leroy42

Top Contributor
Code:
public boolean isSame(SortedBinTree baum) {
  return baum != null &&
            value == baum.value &&
            (left  ==null ? baum.left  ==null : left.isSame(baum.left)) &&
            (right==null ? baum.right==null : right.isSame(baum.right));
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Algorithmus entwickeln Java Basics - Anfänger-Themen 1
laxla123 Eigenschaften eines Algorithmus (determiniert vs.. deterministisch) Java Basics - Anfänger-Themen 2
C Gewinnspiel erstellen mit Algorithmus Java Basics - Anfänger-Themen 3
C negamax-Algorithmus für Tic-Tac-Toe spielt manchmal falsch Java Basics - Anfänger-Themen 10
H Minimax Algorithmus in Tic Tac Toe Java Basics - Anfänger-Themen 3
M Minimax-Algorithmus für Vier gewinnt Java Basics - Anfänger-Themen 11
ohneInformatik; Trockentest Algorithmus, mathematischen Zusammenhang angeben Java Basics - Anfänger-Themen 3
M Minimax-Algorithmus Java Basics - Anfänger-Themen 17
mervanpolat Binary Search Algorithmus ausführen Java Basics - Anfänger-Themen 1
J Rekursiver Algorithmus Java Basics - Anfänger-Themen 9
M monte carlo Algorithmus für 4 gewinnt Java Basics - Anfänger-Themen 12
izoards Sortier Algorithmus für Bounding Box Elememte Links nach Rechts und von Oben nach Unten Java Basics - Anfänger-Themen 33
S Algorithmus entwicklen, der zu einem gegebenen Datum die Jahreszeit ermittelt Java Basics - Anfänger-Themen 13
rosima26 Merge-Algorithmus Java Basics - Anfänger-Themen 53
C Ein Algorithmus soll schneller werden Java Basics - Anfänger-Themen 24
D Dijkstra Algorithmus Hilfe!! Java Basics - Anfänger-Themen 9
U Den Kuchen aufteilen - aber wie? (Rebalancing-Algorithmus) Java Basics - Anfänger-Themen 14
s_1895 Pseudocode Naiver Algorithmus Java Basics - Anfänger-Themen 17
H String verschlüsseln - eigener Algorithmus Java Basics - Anfänger-Themen 104
T Algorithmus für Index mit min-Wert Java Basics - Anfänger-Themen 2
Düsseldorf2002 Testen meines Algorithmus Java Basics - Anfänger-Themen 1
D Primzahlen Rechner nach Eratostenes von Kyrene Algorithmus Java Basics - Anfänger-Themen 2
KogoroMori21 Frage zum Euklidischen Algorithmus Java Basics - Anfänger-Themen 11
S Algorithmus java searchAll IKey Java Basics - Anfänger-Themen 4
S Algorithmus Datensätze einfügen wenn... Java Basics - Anfänger-Themen 26
KogoroMori21 MergeSort Algorithmus Java Basics - Anfänger-Themen 2
KogoroMori21 Textdatei einlesen im Array (Selection Sort Algorithmus) Java Basics - Anfänger-Themen 3
fendix Compiler-Fehler Algorithmus zur Bestimmung von Primzahlen Java Basics - Anfänger-Themen 7
S Algorithmus (reelle Zahl <65536 von dezimal zu dual) max. 10 Nachkommastellen Java Basics - Anfänger-Themen 4
G Algorithmus Graphen Java Basics - Anfänger-Themen 10
D Input/Output fehlerhafter Algorithmus zum Ersetzen von Array-Werten nach logischem Schema Java Basics - Anfänger-Themen 1
N Selection Algorithmus: Methode wird nicht erkannt (BlueJ) Java Basics - Anfänger-Themen 3
U Meinung zum Dijkstra Algorithmus Java Basics - Anfänger-Themen 6
U Dijkstra Algorithmus Laufzeit Java Basics - Anfänger-Themen 3
L Math.exp also eigenen Algorithmus Java Basics - Anfänger-Themen 2
Kirby.exe Algorithmus entwickeln Java Basics - Anfänger-Themen 37
M Algorithmus Max-Heap? Java Basics - Anfänger-Themen 3
I Labyrinth auf der Basis eines rekursiven Algorithmus Java Basics - Anfänger-Themen 27
CptK Best Practice Algorithmus nach jedem Schritt zum Visualisieren pausieren Java Basics - Anfänger-Themen 3
A Algorithmus effizienter machen Java Basics - Anfänger-Themen 1
V Algorithmus zur fortlaufenden Berechnung des duechscjnt Java Basics - Anfänger-Themen 1
M Dijkstra Algorithmus in Graphen auf mehrere verschiedene Knoten anwenden lassen Java Basics - Anfänger-Themen 11
O Labyrinth Algorithmus Java Basics - Anfänger-Themen 3
G Quicksort Algorithmus Java Basics - Anfänger-Themen 12
S Binäre-Suche Algorithmus Java Basics - Anfänger-Themen 1
D Algorithmus in Pseudocode mit log2(n) Operationen erstellen Java Basics - Anfänger-Themen 3
C Laufzeit eines Sortier-Algorithmus ermitteln Java Basics - Anfänger-Themen 4
H aufgabe java luhn algorithmus Java Basics - Anfänger-Themen 10
A Datenstruktur für Savings Algorithmus und Planung von kleinen Programmierprojekten Java Basics - Anfänger-Themen 1
J Algorithmus für eine Reihe implementieren Java Basics - Anfänger-Themen 2
S Dijkstra Algorithmus funktioniert nicht Java Basics - Anfänger-Themen 4
N Denksportaufgabe durch Algorithmus lösen Java Basics - Anfänger-Themen 2
S Problem mit einem rekursivem FloodFill Algorithmus Java Basics - Anfänger-Themen 62
B Algorithmus Square und Multiply Java Basics - Anfänger-Themen 3
J Algorithmus - Strings auf eigene Reihenfolge miteinander vergleichen Java Basics - Anfänger-Themen 4
D Frage Boyer-Moore Algorithmus Java Basics - Anfänger-Themen 7
M Komplexität Algorithmus Java Basics - Anfänger-Themen 8
H Zeichen im algorithmus Java Basics - Anfänger-Themen 4
B Code Verständnisfragen - FLoyd Warshall Algorithmus Java Basics - Anfänger-Themen 1
B Algorithmus zum entmischen einer Zahlenfolge Java Basics - Anfänger-Themen 15
X Minimax-Algorithmus über alle Kanten möglich? - Kanten darstellen Java Basics - Anfänger-Themen 1
T Algorithmus zur Überprüfung eines binären Suchbaums Java Basics - Anfänger-Themen 2
K Best Practice Algorithmus für Berechnung von Zahlenreihenfolge Java Basics - Anfänger-Themen 12
M Simpler Algorithmus läuft extrem langsam. Java Basics - Anfänger-Themen 3
K Erste Schritte Brute Force Algorithmus Java Basics - Anfänger-Themen 2
L Frage zu BubbleSort Algorithmus Java Basics - Anfänger-Themen 2
B gibt es ein Stundenplan-Algorithmus? Java Basics - Anfänger-Themen 11
O Algorithmus-Problem Java Basics - Anfänger-Themen 5
P Euklidischer Algorithmus Java Basics - Anfänger-Themen 9
L Greates Commong Dividend - euklidischer Algorithmus, modulos not positive Java Basics - Anfänger-Themen 5
J Euklidischer Algorithmus Java Basics - Anfänger-Themen 1
S Quicksort Algorithmus Java Basics - Anfänger-Themen 2
S GraphNode --- Dijkstra Algorithmus : NullPointerException Java Basics - Anfänger-Themen 1
B Rekursive Algorithmus schreiben Java Basics - Anfänger-Themen 8
V Algorithmus in einer Methode ausführen Java Basics - Anfänger-Themen 3
M Implementierung des Knuth-Morris-Pratt-Algorithmus Java Basics - Anfänger-Themen 0
M Dijkstras Algorithmus Java Basics - Anfänger-Themen 5
S Zusammenhang Datenstruktur/Algorithmus Java Basics - Anfänger-Themen 1
M Simulation - Algorithmus Java Basics - Anfänger-Themen 3
F Erste Schritte Hilfe beim Algorithmus finden Java Basics - Anfänger-Themen 8
D Algorithmus für Punkte auf einem Kreis Java Basics - Anfänger-Themen 0
D Algorithmus zu gegebener Laufzeit implementieren Java Basics - Anfänger-Themen 1
B Doppelte Werte aus Array entfernen ohne Import - Algorithmus Java Basics - Anfänger-Themen 5
C Ideen für einen Algorithmus Java Basics - Anfänger-Themen 1
F Best Practice Algorithmus optimieren - Binaeruhr Java Basics - Anfänger-Themen 2
S Euklid Algorithmus zur Berechnung des GGTs Java Basics - Anfänger-Themen 2
L Welcher Algorithmus ist das ? Java Basics - Anfänger-Themen 9
J Rekursiver Horner-Schema-Algorithmus - Verstehe ich ihn richtig? Java Basics - Anfänger-Themen 2
O Java Zufalls-Verteil-Algorithmus Java Basics - Anfänger-Themen 3
P ganz simpler algorithmus Java Basics - Anfänger-Themen 3
C Sortieren ohne Algorithmus Java Basics - Anfänger-Themen 8
J Algorithmus: Grad von floating zu Grad/Minute/Sekunde Java Basics - Anfänger-Themen 3
A Text Verschriebung/Algorithmus(?) Java Basics - Anfänger-Themen 8
R Rekursionsformel für Laufzeit von Algorithmus Java Basics - Anfänger-Themen 3
E Algorithmus für kart. Produkt: als int [] Feld repräsentiert Java Basics - Anfänger-Themen 10
U Peterson Algorithmus Java Basics - Anfänger-Themen 13
algebraiker Collections Bräuchte Hilfe bei dem Algorithmus - LinkedHashMap Java Basics - Anfänger-Themen 2
S A* Path Algorithmus in Java schon vorhanden Java Basics - Anfänger-Themen 3
S Bubble Sort Algorithmus Java Basics - Anfänger-Themen 3
N Unerklärlich: Rekursiver Algorithmus gibt falschen Datentyp zurück... Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben