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 04/18/01 * @author Dung X. Nguyen, Copyright 2000 - All Rights Reserved. * @author Alan L. Cox */ class Node2 extends ANode234 { // Data invariant: _leftTree != null private Tree234 _leftTree = new Tree234(); // Data invariant: _data != null private Integer _data; // Data invariant: _rightTree != null private Tree234 _rightTree = new Tree234(); /** * 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); } } } 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); } }