Binärbaum prüfen, ob sortiert oder unsortiert

speedle

Mitglied
Hallo,

wie überprüfe ich am einfachsten, ob ein Binärbaum sortiert oder unsortiert vorliegt?
Also ich habe bereits Bäume erstellt mit Wurzel sowie linken + rechten Ästen. Und am einfachsten erscheint mir mittels der Infix Ordnung zu überprüfen, ob er (un)sortiert ist, hier muss nämlich der vorhergehende Datenwert immer kleiner sein als der darauffolgende.
Oder gibt es noch ne elegantere Lösung und wie setze ich diese am geschicktesten in einer boolean Methode um?

Gruß
 

Ziegenpeter

Aktives Mitglied
Nunja, du solltest schon wissen wie du den Baum traversieren willst um festzustellen ob er sortiert ist. Jede Traversierung liefert dir mitunter andere Ergebnisse zurück. Außerdem macht das Ganze auch nur Sinn wenn du dir im Klaren über die Implementierung des Baumes und speziell seines insert-Verhaltens bist. Balanciert sich der Baum z.B. selbst aus beim Einfügen, kannst du dir die Methode sparen und annehmen es sei nicht sortiert.

Wenn InOrder-Traversierung das Mittel der Wahl ist hast du ja schon selbst beschrieben wie man's macht. (wobei du drauf achten solltest, dass du's dir richtig vorstellst. Bei InOrder würde dann gelten: linkes_Kind <= parent <= rechtes Kind) Ansonsten wüsste ich keine gescheitere Methode.
 

speedle

Mitglied
Also auf den Baum selbst werden alle 3 möglichen Ordnungen ausgegeben.
Ich weiss aber leider nicht, wie ich nun am geschicktesten vorgehe, um mir eine boolean Methode zu basteln, die mir mitteilt, ob der Baum sortiert ist oder nicht. Angelegt wird der baum einmal händisch und dann wird nichts mehr geändert!
 

Ziegenpeter

Aktives Mitglied
Ja, das du den Baum in In-, Pre- und PostOrder traversieren kannst ist mir klar.

Worauf ich nur hinauswollte ist, dass es nicht viel Sinn macht einfach mal in irgendeiner Weise zu prüfen ob der Baum sortiert ist oder nicht, wenn man nicht weiß was man erwartet oder wie er sortiert sein soll.

Ansonsten hast du ja schon alles gesagt. Du legst dir eine Variable an, die dir das letzte Element anzeigt und gehst InOrder durch. Dabei updatest du immer diese Variable.

Du kannst es ja erstmal probieren und wenn du nicht weiterkommst einfach einen Ansatz hier posten.
 

speedle

Mitglied
Hallo,

mein Problem liegt jetzt darin, dass ich net zu 100% weiss, ob er das alte Datenelement zwischenspeichert oder sich gleich das nächste schnappt?

Java:
public boolean sortiert(){
			if (left != null)
				left.sortiert();
			int temp = data;
			if(temp < data)
				return true;
			if (right != null)
				right.isSorted();
			return false;
		}

Jetzt spuckt er mir immer false aus. Der Fehler liegt sicherlich im Abgleich aktueller Datenwert mit altem Datenwert!?
 

Ziegenpeter

Aktives Mitglied
Nun, dass immer false zurückgegeben wird ist ja klar. Du erstellst eine Variable die nur innerhalb der Methode sichtbar ist. Effektiv vergleichst du im zweiten if ob data < data ist und das ist natürlich immer falsch.

Ich geb' dir mal 'ne Methode, die auf deiner beruht:

Java:
int temporaryValue = Integer.Min_Value; //global deklarierte Temp-Variable
...
public boolean isSorted(){
            boolean res = true;
            if (left != null)
                res = res && left.isSorted();
            res = res && (temporaryValue <= data);
            temporaryValue = data;
            if (right != null)
                res = res && right.isSorted();
            return res;
        }

Diese Lösung bietet dir noch Möglichkeiten dir Gedanken zu machen, da es bewusst keine optimale Lösung ist, sie wohl aber funktionieren wird (ungetestet aufgrund der Uhrzeit).
Das <= ist für die Funktionalität in einem besonderen Randfall wichtig (welcher Fall ist das?), macht allerdings nichts kaputt da ja Werte ruhig doppelt vorkommen dürfen (oder nicht?).
Ansonsten wird dieses Ergebnis genau dann falsch, wenn mindestens ein Vergleich falsch geliefert hat.
 

Ziegenpeter

Aktives Mitglied
Im Eifer des Gefechts hab' ich natürlich einen Fehler gemacht. Die temporaryValue müsste natürlich static sein, sonst klappt es nicht.
Also statt

Java:
int temporaryValue = Integer.MIN_VALUE;

muss es:
Java:
static int temporaryValue = Integer.MIN_VALUE;

heißen. Diese Lösung erfordert aber ein zurücksetzen der Variable vorm nächsten prüfen, aber ich sagte ja schon, dass ich keine optimale Lösung geben wollte da du auch noch ein wenig nachdenken darfst.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Binärbaum auf Vollständigkeit prüfen Java Basics - Anfänger-Themen 15
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
B Binärbaum mit java implementieren! Java Basics - Anfänger-Themen 5
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
P einen binärbaum implementieren 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
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
S Binärbaum implementieren Java Basics - Anfänger-Themen 6
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
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
D Wie kann man in Java nach Arrays auf Duplikate prüfen Java Basics - Anfänger-Themen 12
J Schlüsselworte Prüfen, ob ein bestimmtes, ganzes Wort in einem String enthalten ist. Java Basics - Anfänger-Themen 6
Ostkreuz Int Scanner auf Enter Eingabe prüfen Java Basics - Anfänger-Themen 4
S Prüfen ob ein zweidimensionales Array rechteckig ist Java Basics - Anfänger-Themen 4
M Prüfen on eine Zahl im String enthalten ist Java Basics - Anfänger-Themen 3
ravenz Schleife mit for über String Array „zahlen“und prüfen ob Wert „a“ oder „b“ oder „c“ entspricht (mittels || ) Java Basics - Anfänger-Themen 4
Fiedelbambu Prüfen von Komma stelle beim Taschenrechner Java Basics - Anfänger-Themen 5
sserio Prüfen, ob eine Zahl eine periodische Zahl ist Java Basics - Anfänger-Themen 20
I Auf vollen Monat prüfen? Java Basics - Anfänger-Themen 22
A Dateiname auf Vorkommen prüfen Java Basics - Anfänger-Themen 29
I Prüfen, ob Anzahl an Monate ein Jahr ergeben Java Basics - Anfänger-Themen 4
K Warum gibt mir z. B. 40^128 eine Zahl? Ich dachte mit xor kann man nur booleanwerte erhalten, also prüfen ob etwas whar oder falsch ist? Java Basics - Anfänger-Themen 1
W Klasse existiert prüfen Java Basics - Anfänger-Themen 5
Q Prüfen ob Zahl als Summe von Potenzen dargestellt werden kann. Java Basics - Anfänger-Themen 20
U Kann man bei Java gleich mehrere Bedingungen prüfen in der If, aber in einem "Satz"? Java Basics - Anfänger-Themen 1
O Ich ahbe einen char und diesen soll ich bei .matches prüfen, also ob der char in meiner Zeichenkette vorhanden ist, wie mache ich das? Java Basics - Anfänger-Themen 9
B Array nach Wert prüfen rekursiv Java Basics - Anfänger-Themen 5
G Strings auf Gleichheit prüfen - Aufgabe vom Prof. Java Basics - Anfänger-Themen 5
M Array auf Primzahlen prüfen Java Basics - Anfänger-Themen 7
K Wie String prüfen ob drei mal das gleiche Zeichen vorkommt? Java Basics - Anfänger-Themen 7
J ArrayList auf bereits vorhanden eintrag prüfen Java Basics - Anfänger-Themen 5
X Zwei Dimensionales Array prüfen Java Basics - Anfänger-Themen 1
B Prüfen, ob Zeit Überschreitung Java Basics - Anfänger-Themen 2
B Sudoku prüfen Java Basics - Anfänger-Themen 13
M Prüfen auf null ohne NPE Java Basics - Anfänger-Themen 1
X Array auf Leerstellen prüfen Java Basics - Anfänger-Themen 1
FelixN Prüfen, ob ein 2D-Array rechteckig ist Java Basics - Anfänger-Themen 42
C Erste Schritte JComboBox Einträge auf Duplikat prüfen Java Basics - Anfänger-Themen 4
M prüfen ob alle array werte gleich sind Java Basics - Anfänger-Themen 27
C Array auf Null-Inhalte prüfen Java Basics - Anfänger-Themen 9
B Prüfen, ob Country Code in Europa ist? Java Basics - Anfänger-Themen 24
L Prüfen ob Fax (Tif-Datei) vollständig angekommen ist Java Basics - Anfänger-Themen 15
O Datenstruktur auf SET prüfen in O(n) Java Basics - Anfänger-Themen 32
O Einzelne Bits umwandeln und prüfen Java Basics - Anfänger-Themen 23
U Mehrfacheingabe auf bestimmte Parameter prüfen Java Basics - Anfänger-Themen 8
B Prüfen, ob Datum2 der gleiche Tag ist wie Datum1 Java Basics - Anfänger-Themen 10
Dimax Erste Schritte String Eingabe Prüfen Java Basics - Anfänger-Themen 11
S char auf buchstabe/zeichen prüfen Java Basics - Anfänger-Themen 1
S Array doppelter Wert prüfen Java Basics - Anfänger-Themen 7
B Prüfen, ob es schon einen Termin gibt in einem Zeitraum Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben