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