/* 6/25/97 DXN This file contains the code for class Node2 which represents nodes with only 2 subtrees of a 2-3-4 tree. It contains the data object, a left Tree234 and a right Tree234. Copyright 1997, Dung X. Nguyen - All Rights Reserved. */ class Node2 extends ANode234 { /** @SBGen Variable (,,,64) */ private Tree234 _leftTree; //Data invariant: _leftTree != null private Integer _data; /** * Data invariant: _data != null * @SBGen Variable (,,,64) */ private Tree234 _rightTree; //Data invariant: _rightTree != null Node2(Integer n) //pre: n != null { _data = n; _leftTree = new Tree234 (); _rightTree = new Tree234 (); //Data invariants are maintained. } Node2(Tree234 lTree, Integer n, Tree234 rTree) //Pre: lTree, n, and rTree are not null. //Post: node contains n and lTree, rTree as left and right subtree. { _data = n; _leftTree = lTree; _rightTree = rTree; } final boolean isEmpty () { return false; } final void drawRootAndSubtrees (int level) { System.out.println (_data); _leftTree.drawAtLevel (level + 1); System.out.println (); _rightTree.drawAtLevel (level + 1); } final void insert (Tree234 parent, Integer n) { int dataVal = _data.intValue (); int key = n.intValue (); if ( key == dataVal) return; if (isLeafNode()) parent.changeRoot (new Node3 (n, _data)); else {//parent is parent of left and right subtrees. if (key < dataVal) _leftTree.insertHelper (parent, n); else // (dataVal < key) _rightTree.insertHelper (parent, n); } } final void insertHelper (Tree234 grandPo, Tree234 parent, Integer n) { insert (parent, n); } final void attach (Tree234 parent, 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); parent.changeRoot (topNode); } private final boolean isLeafNode () { return (_leftTree.isEmpty () && _rightTree.isEmpty ()); } }