Node2.java
Created with JBuilder
package t234;

/**
* Represents nodes with only 2 subtrees of a 2-3-4 tree.
* It contains the data object, a left Tree234 and a right Tree234.
* @since 11/13/01
* @author Dung X. Nguyen, Copyright 2001 - All Rights Reserved.
*/
class Node2 extends ANode234 {
    private Tree234 _leftTree = new Tree234();  //Invariant:  _leftTree  != null
    private Integer _data;                      //Invariant: _data != null
    private Tree234 _rightTree = new Tree234(); //Invariant:  _rightTree != null

    /**
    * Initializes this Node2 to contain n and two empty subtrees.
    * @param n != null
    */
    Node2(Integer n) {
        _data      = n;
    }

    /**
    * Initializes this Node2 to contain the given data and the given left and
    * right subtrees.
    * @param lTree != null  the left subtree whose elements are less than n.
    * @param n != null less than all elements in rTree.
    * @param rTree != null  the right subtree
    */
    Node2(Tree234 lTree, Integer n, Tree234 rTree) {
        _data      = n;
        _leftTree  = lTree;
        _rightTree = rTree;
    }

    final boolean isEmpty(Tree234 owner) {
        return false;
    }

    final void insert(Tree234 owner, Integer n) {
        int dataVal = _data.intValue();
        int key     = n.intValue();
        if (key != dataVal) {
            if (_leftTree.isEmpty () && _rightTree.isEmpty ()) {// leaf node.
                owner.changeRoot (new Node3 (n, _data));
            } else {//owner is parent of left and right subtrees.
                if (key < dataVal) {
                    _leftTree.insertHelper(owner, n);
                } else { // (dataVal < key)
                    _rightTree.insertHelper(owner, n);
                }
            }
        }
        return;
    }

    final void insertHelper(Tree234 ownerPo, Tree234 owner, Integer n) {
        owner.insert (n); // can call insert (owner, n) instead.
    }

    final void attach (Tree234 owner, Tree234 lTree, Integer n, Tree234 rTree) {
        Node3 topNode
        = n.intValue () < _data.intValue ()?
            new Node3(lTree, n, rTree, _data, _rightTree):
            new Node3(_leftTree, _data, lTree, n, rTree);
        owner.changeRoot(topNode);
    }

    final void drawRootAndSubtrees(int level) {
        System.out.println(_data);
        _leftTree.drawAtLevel(level + 1);
        System.out.println();
        _rightTree.drawAtLevel(level + 1);
    }
}


Node2.java
Created with JBuilder