Sie sind auf Seite 1von 1

import java.util.

*;

class TwoThreeTree<T extends Comparable<T>> implements Iterable


{
private Node root;
private int size;
private boolean modified = true;
private Traversal traverse;

TwoThreeTree()
{
root = null;
traverse = new Traversal();
size = 0;
}

void addAll(Collection<T> collection)


{
for (T item: collection)
this.insert(item);
modified = true;
}

void insert(T x)
{
if (root == null) // If root is null, then create a new root with null as the parent
{
root = new Node(x);
size++;
}
root.insert(x); // Otherwise induce a recursive insert.
modified = true;
}

int size()
{
return size;
}

String search(T x)
{
if (root == null) // If the root is null, then tree doesn't exist -> return null
return null;
return root.search(x).toString(); // Else begin a recursive search from the root.
}

void clear()
{
root = null;
size = 0;
}

public Iterator<T> iterator()


{
if (modified) // Build in-order Linked-List only if the tree was modified.
{
traverse.traverseTree(); // Traverse the tree
modified = false; // Set flag to false since we just built a linked-list.
}
return traverse.ordered.iterator(); // Delegate the task of iterator to Linked-List's in built iterator.
}

//-----------------------------------------Inner Iterator Class-------------------------------------------------//

private class Traversal


{
ArrayList<T> ordered;

void traverseTree()
{
ordered = new ArrayList<>(); // Reset the ordered list. traverseTree will be only called in case of
modification
traverse(root); // Initialize traversal from the root.
}

Das könnte Ihnen auch gefallen