binary search trees - order

crossit

Mitglied
Hallo,

habe eine weiteres Problem wo ich nicht durchblicke

unzwar möchte ich gerne eine pre-Order und in-Order bei einem BST darstellen...
habe soweit auch etwas geschafft jedoch gibt der Code mir nur den ersten wert wieder :S

Java:
	public LinkedList<Integer> preOrder(BinTreeNode root) {
		LinkedList<Integer> out = new LinkedList <Integer>();
		if (root.left != null){
                        out.addAll(preOrder(root.getLeft()));
                        out.add(root.getData());
		}
		if (root.right != null){
			out.addAll(preOrder(root.getRight()));
			
			out.add(root.getData());
		}
		return out;
	}


	public LinkedList<Integer> preOrder() {
		
		return preOrder(root);
	}
	public LinkedList<Integer> inOrder() {
		
		return inOrder(root);
	}
	
	public LinkedList <Integer> inOrder (BinTreeNode root){
		LinkedList <Integer> out = new LinkedList <Integer>();
		if (root.left != null && root.right != null){
			out.addAll(inOrder(root.getLeft()));
			out.addAll(inOrder(root.getRight));
			out.add(root.getData());
			
		}
		return out;
	}
 

Timothy Truckle

Top Contributor
okay und wie mach ich das jetzt?
erstehe ih das richig, dass Du zu Ausgabe über die von
Code:
inOrder()
zurückggebene Liste itrierst?

Code:
inOrder()
funktioniert aber nur richtig, wenn der Baum ausbalanciert ist, d.h.: jeder Knoten linken und rechten Nachfolger hat. Wenn einer von beiden fehlt gibt der Koten eine leere Liste zurück, da ist dann nicht mal sein eigener Wert drin.

Schau Dir das mal im Debugger an.

bye
TT
 

crossit

Mitglied
muss ehrlich gestehen das ich mit dem deburger noch keine erfahrung gesammelt hat er zeigt mir nur die erste anfangszahl an und genau das selbe habe ich auch bei preOrder
 

ZomgMeister

Neues Mitglied
Vermutlich weil Du nicht (rekursiv) über die KindKnoten iterierst....

bye
TT

Macht er doch?
Java:
out.addAll(inOrder(root.getLeft()));
out.addAll(inOrder(root.getRight));
auch wenn da ne Klammer fehlt ;)

erstehe ih das richig, dass Du zu Ausgabe über die von
Code:
inOrder()
zurückggebene Liste itrierst?

Code:
inOrder()
funktioniert aber nur richtig, wenn der Baum ausbalanciert ist, d.h.: jeder Knoten linken und rechten Nachfolger hat. Wenn einer von beiden fehlt gibt der Koten eine leere Liste zurück, da ist dann nicht mal sein eigener Wert drin.

Schau Dir das mal im Debugger an.

bye
TT

Für Order-Sachen muss der Baum keine besonderen Eigenschaften erfüllen. (Abgesehen natürlich davon, dass er ein Binärer Suchbaum sein muss)
Keine Ahnung, warum der Baum dafür ausbalanciert sein muss.

Und wie stellst du dir vor, dass jeder Knoten einen rechten und linken Nachfolger hat? Dann wäre der Baum ja unendlich.

Die Methode an sich ist schon fast richtig, blos das sie so post-Order ausgeben würde. Bei In-Order fügt du den rechten Zweig ein, dann den Knoten selber, und dann den Linken Zweig. Im jetzigen Code würde er den Knoten erst zum Schluss hinzufügen.
Achja, und du musst nicht die Kinder überprüfen, ob sie null sind, sondern den aktuellen Knoten.
 

Timothy Truckle

Top Contributor
Für Order-Sachen muss der Baum keine besonderen Eigenschaften erfüllen. (Abgesehen natürlich davon, dass er ein Binärer Suchbaum sein muss)
Keine Ahnung, warum der Baum dafür ausbalanciert sein muss.
Im allgemeinen hast Du recht, aber seine Implementierung funktioniert nur in einem Symmetrischen, balangierten Baum und selbst dann fehlen die Blätter...


Und wie stellst du dir vor, dass jeder Knoten einen rechten und linken Nachfolger hat? Dann wäre der Baum ja unendlich.
Ich garnicht, ich analysiere nur die Implementierung.
Achja, und du musst nicht die Kinder überprüfen, ob sie null sind, sondern den aktuellen Knoten.
Wenn der Aktuelle Knoten
Code:
null
ist bekomme ich doch eine NPE, oder?

bye
TT
 

ZomgMeister

Neues Mitglied
Im allgemeinen hast Du recht, aber seine Implementierung funktioniert nur in einem Symmetrischen, balangierten Baum und selbst dann fehlen die Blätter...


Ich garnicht, ich analysiere nur die Implementierung.
Wenn der Aktuelle Knoten
Code:
null
ist bekomme ich doch eine NPE, oder?

bye
TT

ah, also die Zeile
Java:
if (root.left != null && root.right != null){
verursacht das Problem, dass der Baum balanciert sein muss.
Wenn diese in
Java:
if (root != null){
geändert wird, sollte es für jeden beliebigen Baum klappen.
Wobei es dann aber post-order ist.

Java:
out.addAll(inOrder(root.getLeft()));
out.add(root.getData());
out.addAll(inOrder(root.getRight));

würde dann in-order ausgeben.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
mervanpolat Binary Search Algorithmus ausführen Java Basics - Anfänger-Themen 1
S Binary Search Tree - Nummerierung in Inorder Java Basics - Anfänger-Themen 5
G Frage zu Binary Search Java Basics - Anfänger-Themen 3
KeinJavaFreak Erste Schritte Programm "Java(TM) Platform SE binary " nicht vorhanden Java Basics - Anfänger-Themen 1
R Operatoren Bad operand types for binary operator Java Basics - Anfänger-Themen 4
L Operatoren error: bad operand types for binary operator && Java Basics - Anfänger-Themen 8
I bad operand types for binary operator > Java Basics - Anfänger-Themen 5
H Operatoren Fehler bad operand types for binary operator Java Basics - Anfänger-Themen 7
K Zugriff einer Klasse auf eine andere Andere -> bad operand for binary operator Java Basics - Anfänger-Themen 5
J bad operand types for binary operator Java Basics - Anfänger-Themen 3
N Compiler-Fehler Dezimal to binary Java Basics - Anfänger-Themen 2
StupidAttack Binary Operations Java Basics - Anfänger-Themen 13
D Javacode direkt in Betriebsystemabhängiges binary umwandeln Java Basics - Anfänger-Themen 5
M Einlesen von Binärdateien (binary interleaved by line) Java Basics - Anfänger-Themen 3
H Serialization: Was ist besser(schneller) Binary <-> XM Java Basics - Anfänger-Themen 2
5 String To Binary Java Basics - Anfänger-Themen 26
L Ist eine Datei binary oder text encoded Java Basics - Anfänger-Themen 8
R Binary Stream in Bild umwandeln Java Basics - Anfänger-Themen 5
S Java TelephoneBookEntry search Java Basics - Anfänger-Themen 2
L Breadth-First Search statt einem Pfad, alle Pfade herausfinden Java Basics - Anfänger-Themen 4
T filecontentheader search Java Basics - Anfänger-Themen 16
M Search in ArrayList<T>? Java Basics - Anfänger-Themen 8
S [EDIT] Tiefensuche / Depth-First-Search / Greedy Algorithmus Java Basics - Anfänger-Themen 6
K trees Java Basics - Anfänger-Themen 30
M Frage zu den ganzen Trees / Maps Java Basics - Anfänger-Themen 6
D Expression Trees Java Basics - Anfänger-Themen 3

Ähnliche Java Themen


Oben