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);
}
}