Hi
Ich habe mir einen Iterator für eine inorder-Traversierung durch einen Binärbaum programmiert.
Es geht um die Klasse InOrderTraverse (die restlichen Klassen einfach ignorieren, sie dienen nur zum Testen).
Programmiert man eine inorder-Traversierung auf diese Weise? Mit 2 Beispielen scheint das zu funktionieren. Ist das OK? Oder programmiert man das irgendwie anders?
Ich habe mir einen Iterator für eine inorder-Traversierung durch einen Binärbaum programmiert.
Es geht um die Klasse InOrderTraverse (die restlichen Klassen einfach ignorieren, sie dienen nur zum Testen).
Java:
import java.util.Enumeration;
import java.util.Stack;
class O
{
public int value;
public O(int value)
{
this.value = value;
}
}
class BinaryTree
{
public BinaryTree left = null;
public BinaryTree right = null;
public O o = null;
/**
* Sortiert einfügen.
* In linken subtree alle Werte < dem eigenen Wert. Ansonst in rechten subtree.
* @param O o
*/
public void insert(O o)
{
if(this.o == null)
{
this.o = o;
}
else if(o.value < this.o.value)
{
// links weiter
if(left == null)
{
// noch kein subtree vorhanden
left = new BinaryTree();
}
left.insert(o); // insert-Befehl in subtree weiterdelegieren
}
else
{
// rechts weiter
if(right == null)
{
// noch kein subtree vorhanden
right = new BinaryTree();
}
right.insert(o); // insert-Befehl in subtree weiterdelegieren
}
}
}
class BinaryTreeTraverse
{
static void inOrder(BinaryTree t)
{
if(t != null)
{
inOrder(t.left); // linker subtree
System.out.println(t.o.value);
inOrder(t.right); // rechter subtree
}
}
}
class InOrderTraverse implements Enumeration<O>
{
private Stack<BinaryTree> stack;
public InOrderTraverse(BinaryTree t)
{
stack = new Stack<BinaryTree>();
left(t);
}
private void left(BinaryTree t)
{
while(t != null)
{
stack.push(t);
t = t.left;
}
}
public boolean hasMoreElements()
{
return !stack.isEmpty();
}
public O nextElement()
{
BinaryTree t = stack.pop();
left(t.right);
return t.o;
}
}
class Tree
{
public static void main(String[] args)
{
/*
// Test 1:
BinaryTree t = new BinaryTree();
t.insert(new O(7));
t.insert(new O(2));
t.insert(new O(1));
t.insert(new O(0));
t.insert(new O(3));
t.insert(new O(5));
t.insert(new O(4));
t.insert(new O(6));
t.insert(new O(8));
BinaryTreeTraverse.inOrder(t);
System.out.println("-----------------");
Enumeration<O> e = new InOrderTraverse(t);
while(e.hasMoreElements())
{
O o = e.nextElement();
System.out.println(o.value);
}*/
// Test 2:
BinaryTree t = new BinaryTree();
t.insert(new O(1));
t.insert(new O(0));
t.insert(new O(6));
t.insert(new O(5));
t.insert(new O(3));
t.insert(new O(2));
t.insert(new O(4));
t.insert(new O(7));
t.insert(new O(8));
BinaryTreeTraverse.inOrder(t);
System.out.println("-----------------");
Enumeration<O> e = new InOrderTraverse(t);
while(e.hasMoreElements())
{
O o = e.nextElement();
System.out.println(o.value);
}
}
}
Zuletzt bearbeitet: