#include "stdstuff.h" #include "Tree.h" void Tree::purge (TNode* subroot) { if (subroot == NULL) return; // nothing to purge purge (subroot -> left); // dispose of the left subtree purge (subroot -> right); // dispose of the right subtree delete subroot; // get rid of the root node } Tree::~Tree () { purge (root); } bool Tree::insert (int data) { bool success; success = subInsert (root, data, success); if (success) size++; return success; } int Tree::getSize() const { return size; } void Tree::subDisplay (String2002 leftPreString, String2002 midPreString, String2002 rightPreString, TNode *subRoot) const { String2002 valueString, blankString; ostringstream formatter(ostringstream::out); if (subRoot == NULL) { cout << midPreString << "NULL\n"; } else { // we want valueString to contain the data value and balance factor // followed by a hyphen the following is ugly but does the job. formatter << (subRoot -> data) << "(" << (subRoot -> balance) << ")-" << ends; valueString = formatter.str(); // blankString is to consist of all blanks and to have the same // length as valueString. this approach is crude but portable. for (int i = 0; i < valueString.length(); i++) { blankString += ' '; } subDisplay (rightPreString + blankString + "| ", rightPreString + blankString + "|-", rightPreString + blankString + " ", subRoot -> right); cout << midPreString << valueString << "|\n"; subDisplay (leftPreString + blankString + " ", leftPreString + blankString + "|-", leftPreString + blankString + "| ", subRoot -> left); } } void Tree::display () const { subDisplay ("", "", "", root); } // the four rotate methods are removed from this version and will be added in "skeleton.cpp" // after the assignment #8 due date