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 12/03/00 * @author Dung X. Nguyen, Copyright 2000 - All Rights Reserved. */ class Node2 extends ANode234 { private Tree234 _leftTree = new Tree234 (); //Data invariant: _leftTree != null private Integer _data; // Data invariant: _data != null private Tree234 _rightTree = new Tree234 (); //Data 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, all elements in lTree 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; if (n.intValue () < _data.intValue ()) { topNode = new Node3 (lTree, n, rTree, _data, _rightTree); } else { topNode = 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); } }