package t234; /** * This is an object-oriented implementation 2-3-4 trees using the * state design pattern. * * The classic discussion for 2-3-4 trees is outlined in Sedgewick's * "Algorithms in C++", Addison-Wesley 1992, pp. 215-219. * Other elucidating discussions of balanced trees can * be found in Stubbs and Webre's "Data Structures", * and Aho, Hopcroft and Ullman's "Data Structures and Algorithms". * * @since 04/18/01 * @author Dung X. Nguyen, Copyright 2000 - All Rights Reserved. * @author Alan L. Cox */ public class Tree234 { private ANode234 _rootNode; /** * Initializes this Tree234 to empty. */ public Tree234() { _rootNode = EmptyNode.Singleton; } /** * Initializes this Tree234 to contain exactly one data element, an * empty left subtree, and an empty right subtrees. The subtrees * are Tree234. * * This constructor is not intrinsically needed. It exists as a * convenience only. * * @param n != null. */ public Tree234(Integer n) { _rootNode = new Node2(n); } public final boolean isEmpty() { return _rootNode.isEmpty(this); } /** * Inserts an Integer into this Tree234 without duplication. * * @param n != null. */ public final void insert(Integer n) { _rootNode.insert(this,n); } /** * For debugging purpose. * EXERCISE FOR STUDENTS: Write the toString() method instead. * Hint: see the binary tree example. */ public final void draw() { drawAtLevel(0); } /////////////////////////////////////// //Not visible outside of package Tree234(ANode234 root) { _rootNode = root; } Tree234(Tree234 lTree, Integer n, Tree234 rTree) { _rootNode = new Node2(lTree, n, rTree); } final void drawAtLevel(int level) { _rootNode.drawAtLevel(level); } final void changeRoot(ANode234 newRoot) { _rootNode = newRoot; } final ANode234 root() { return _rootNode; } final void insertHelper(Tree234 parent, Integer n) { _rootNode.insertHelper(parent, this, n); } final void attach(Tree234 lTree, Integer n, Tree234 rTree) { _rootNode.attach(this, lTree, n, rTree); } }