<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mywikibiz.com/index.php?action=history&amp;feed=atom&amp;title=Directory%3ADerek_Elder%2FPrograms%2FBinarySearchTree</id>
	<title>Directory:Derek Elder/Programs/BinarySearchTree - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mywikibiz.com/index.php?action=history&amp;feed=atom&amp;title=Directory%3ADerek_Elder%2FPrograms%2FBinarySearchTree"/>
	<link rel="alternate" type="text/html" href="https://mywikibiz.com/index.php?title=Directory:Derek_Elder/Programs/BinarySearchTree&amp;action=history"/>
	<updated>2026-06-14T09:58:46Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.35.3</generator>
	<entry>
		<id>https://mywikibiz.com/index.php?title=Directory:Derek_Elder/Programs/BinarySearchTree&amp;diff=51719&amp;oldid=prev</id>
		<title>Derek Elder: start of page - work to be done</title>
		<link rel="alternate" type="text/html" href="https://mywikibiz.com/index.php?title=Directory:Derek_Elder/Programs/BinarySearchTree&amp;diff=51719&amp;oldid=prev"/>
		<updated>2007-12-18T01:10:23Z</updated>

		<summary type="html">&lt;p&gt;start of page - work to be done&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;__TOC__&lt;br /&gt;
==Tree.h==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
class Student&lt;br /&gt;
{&lt;br /&gt;
private:&lt;br /&gt;
	string m_name;&lt;br /&gt;
	int m_age;&lt;br /&gt;
	string m_major;&lt;br /&gt;
	int m_test[3];&lt;br /&gt;
	int m_id;&lt;br /&gt;
public:&lt;br /&gt;
	Student(string name, int age, string major, int test[], int id);&lt;br /&gt;
	Student();&lt;br /&gt;
	bool readFromFile(ifstream&amp;amp; is);&lt;br /&gt;
	bool readFromKeyboard();&lt;br /&gt;
	void writeToFile(ostream&amp;amp; os);&lt;br /&gt;
	void writeToScreen();&lt;br /&gt;
	int getID() const;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
struct TreeNode&lt;br /&gt;
{&lt;br /&gt;
	Student m_student;&lt;br /&gt;
&lt;br /&gt;
	TreeNode* m_left;&lt;br /&gt;
	TreeNode* m_right;&lt;br /&gt;
	TreeNode(const Student&amp;amp; student, TreeNode* left = NULL, TreeNode* right = NULL);&lt;br /&gt;
};&lt;br /&gt;
ostream&amp;amp; operator&amp;lt;&amp;lt;(ostream&amp;amp; os, const TreeNode&amp;amp; pTree);&lt;br /&gt;
&lt;br /&gt;
class Tree&lt;br /&gt;
{&lt;br /&gt;
	friend ostream&amp;amp; operator&amp;lt;&amp;lt;(ostream&amp;amp; os, const Tree&amp;amp; tree);&lt;br /&gt;
public:&lt;br /&gt;
	Tree();&lt;br /&gt;
	Tree(const Tree&amp;amp; tree2);&lt;br /&gt;
	~Tree();&lt;br /&gt;
	bool IsEmpty() const;&lt;br /&gt;
	int Size() const;&lt;br /&gt;
	bool Insert(const Student&amp;amp; student);&lt;br /&gt;
	bool Delete(int id);&lt;br /&gt;
	bool Lookup(Student&amp;amp; student) const;&lt;br /&gt;
	void Print() const;&lt;br /&gt;
	Tree&amp;amp; operator=(const Tree&amp;amp; tree2);&lt;br /&gt;
private:&lt;br /&gt;
	TreeNode* m_root;&lt;br /&gt;
	int Size(TreeNode* pTree) const;&lt;br /&gt;
	bool Insert(const Student&amp;amp; student, TreeNode *&amp;amp;pTree);&lt;br /&gt;
	bool Delete(int id, TreeNode*&amp;amp; pTree);&lt;br /&gt;
	void DeleteNode(TreeNode*&amp;amp; pTree);&lt;br /&gt;
	void GetPredecessor(int id, TreeNode* pTree);&lt;br /&gt;
	bool Lookup(Student&amp;amp; student, TreeNode* pTree) const;&lt;br /&gt;
	void Print(TreeNode* pTree) const;&lt;br /&gt;
	void Print(ostream&amp;amp; os, TreeNode* pTree) const;&lt;br /&gt;
	void Clear();&lt;br /&gt;
	void Clear(TreeNode* pTree);&lt;br /&gt;
	void Copy(const Tree&amp;amp; tree2);&lt;br /&gt;
	void Copy(TreeNode*&amp;amp; pThis, TreeNode* pTree2);&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Tree.cpp==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;quot;Tree.h&amp;quot;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;iomanip&amp;gt;&lt;br /&gt;
#include &amp;lt;fstream&amp;gt;&lt;br /&gt;
#include &amp;lt;string&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
//-----------------------&lt;br /&gt;
//-----Student Class-----&lt;br /&gt;
//-----------------------&lt;br /&gt;
Student::Student(string name, int age, string major, int test[], int id)&lt;br /&gt;
{&lt;br /&gt;
	int i;&lt;br /&gt;
&lt;br /&gt;
	m_name = name;&lt;br /&gt;
	m_age = age;&lt;br /&gt;
	m_major = major;&lt;br /&gt;
	for(i = 0;i &amp;lt; 3;i++)&lt;br /&gt;
	{&lt;br /&gt;
		m_test[i] = test[i];&lt;br /&gt;
	}&lt;br /&gt;
	m_id = id;&lt;br /&gt;
}&lt;br /&gt;
Student::Student()&lt;br /&gt;
{&lt;br /&gt;
	int i;&lt;br /&gt;
&lt;br /&gt;
	m_name = &amp;quot;&amp;quot;;&lt;br /&gt;
	m_age = 0;&lt;br /&gt;
	m_major = &amp;quot;&amp;quot;;&lt;br /&gt;
	for(i = 0;i &amp;lt; 3;i++)&lt;br /&gt;
	{&lt;br /&gt;
		m_test[i] = 0;&lt;br /&gt;
	}&lt;br /&gt;
	m_id = 0;&lt;br /&gt;
}&lt;br /&gt;
bool Student::readFromFile(ifstream&amp;amp; is)//program 3 readallmoviesfromfile&lt;br /&gt;
{&lt;br /&gt;
	is&amp;gt;&amp;gt;m_name;&lt;br /&gt;
	if(m_name == &amp;quot;***&amp;quot;)&lt;br /&gt;
		return false;&lt;br /&gt;
	else&lt;br /&gt;
	{&lt;br /&gt;
		is&amp;gt;&amp;gt;m_major;&lt;br /&gt;
		is&amp;gt;&amp;gt;m_age;&lt;br /&gt;
		is&amp;gt;&amp;gt;m_test[0]&amp;gt;&amp;gt;m_test[1]&amp;gt;&amp;gt;m_test[2];&lt;br /&gt;
		is&amp;gt;&amp;gt;m_id;&lt;br /&gt;
		return true;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
bool Student::readFromKeyboard()&lt;br /&gt;
{&lt;br /&gt;
	cout&amp;lt;&amp;lt;&amp;quot;Please enter your name: &amp;quot;;&lt;br /&gt;
	cin&amp;gt;&amp;gt;m_name;&lt;br /&gt;
	cout&amp;lt;&amp;lt;&amp;quot;Please enter your major: &amp;quot;;&lt;br /&gt;
	cin&amp;gt;&amp;gt;m_major;&lt;br /&gt;
	cout&amp;lt;&amp;lt;&amp;quot;Please enter your age: &amp;quot;;&lt;br /&gt;
	cin&amp;gt;&amp;gt;m_age;&lt;br /&gt;
	cout&amp;lt;&amp;lt;&amp;quot;Please enter your test scores: &amp;quot;;&lt;br /&gt;
	cin&amp;gt;&amp;gt;m_test[0]&amp;gt;&amp;gt;m_test[1]&amp;gt;&amp;gt;m_test[2];&lt;br /&gt;
	cout&amp;lt;&amp;lt;&amp;quot;Please enter your ID: &amp;quot;;&lt;br /&gt;
	cin&amp;gt;&amp;gt;m_id;&lt;br /&gt;
	return true;&lt;br /&gt;
}&lt;br /&gt;
void Student::writeToFile(ostream&amp;amp; os) //no headers?&lt;br /&gt;
{&lt;br /&gt;
	//ofstream Output&lt;br /&gt;
	//ifstream Input; //open output filename&lt;br /&gt;
	//string filename;&lt;br /&gt;
	//cout&amp;lt;&amp;lt;&amp;quot;Please enter the name of your file: &amp;quot;;&lt;br /&gt;
	//getline(cin,filename);&lt;br /&gt;
	//Input.open(filename);&lt;br /&gt;
	os&amp;lt;&amp;lt;m_name;&lt;br /&gt;
	os&amp;lt;&amp;lt;m_major;&lt;br /&gt;
	os&amp;lt;&amp;lt;m_age;&lt;br /&gt;
	os&amp;lt;&amp;lt;m_test[0]&amp;lt;&amp;lt;m_test[1]&amp;lt;&amp;lt;m_test[2];&lt;br /&gt;
	os&amp;lt;&amp;lt;m_id;&lt;br /&gt;
	//return os;&lt;br /&gt;
}&lt;br /&gt;
void Student::writeToScreen()&lt;br /&gt;
{&lt;br /&gt;
	cout&amp;lt;&amp;lt;setw(15)&amp;lt;&amp;lt;m_name&amp;lt;&amp;lt;setw(15)&amp;lt;&amp;lt;m_major&amp;lt;&amp;lt;setw(15)&amp;lt;&amp;lt;m_age&amp;lt;&amp;lt;setw(15)&amp;lt;&amp;lt;m_test[0]&amp;lt;&amp;lt;&amp;quot; &amp;quot;&amp;lt;&amp;lt;m_test[1]&lt;br /&gt;
            &amp;lt;&amp;lt;&amp;quot; &amp;quot;&amp;lt;&amp;lt;m_test[2]&amp;lt;&amp;lt;setw(15)&amp;lt;&amp;lt;m_id&amp;lt;&amp;lt;endl;&lt;br /&gt;
}&lt;br /&gt;
int Student::getID() const&lt;br /&gt;
{&lt;br /&gt;
	return m_id;&lt;br /&gt;
}&lt;br /&gt;
//-----------------------&lt;br /&gt;
//----TreeNode Struct----&lt;br /&gt;
//-----------------------&lt;br /&gt;
TreeNode::TreeNode(const Student&amp;amp; student, TreeNode* left, TreeNode* right)&lt;br /&gt;
:m_student(student), m_left(left), m_right(right)&lt;br /&gt;
{}&lt;br /&gt;
ostream&amp;amp; operator&amp;lt;&amp;lt;(ostream&amp;amp; os, const TreeNode&amp;amp; pTree)&lt;br /&gt;
{&lt;br /&gt;
	//if(os == cout)&lt;br /&gt;
		//os&amp;lt;&amp;lt;pTree-&amp;gt;m_student.writeToScreen();&lt;br /&gt;
		//os&amp;lt;&amp;lt;*pTree;&lt;br /&gt;
	//else&lt;br /&gt;
		//os&amp;lt;&amp;lt;pTree-&amp;gt;m_student.writeToFile(os);&lt;br /&gt;
		//cout&amp;lt;&amp;lt;*pTree;&lt;br /&gt;
	return os;&lt;br /&gt;
}&lt;br /&gt;
//----------------------&lt;br /&gt;
//------Tree Class------&lt;br /&gt;
//----------------------&lt;br /&gt;
Tree::Tree()&lt;br /&gt;
:m_root(0)&lt;br /&gt;
{}&lt;br /&gt;
Tree::Tree(const Tree&amp;amp; tree2)&lt;br /&gt;
:m_root(0)&lt;br /&gt;
{}&lt;br /&gt;
Tree::~Tree()&lt;br /&gt;
{&lt;br /&gt;
	Clear();&lt;br /&gt;
}&lt;br /&gt;
bool Tree::IsEmpty() const&lt;br /&gt;
{&lt;br /&gt;
	return(m_root == 0);&lt;br /&gt;
}&lt;br /&gt;
int Tree::Size() const&lt;br /&gt;
{&lt;br /&gt;
	return Size(m_root);&lt;br /&gt;
}&lt;br /&gt;
int Tree::Size(TreeNode* pTree) const&lt;br /&gt;
{&lt;br /&gt;
	if(pTree == 0)&lt;br /&gt;
		return 0;&lt;br /&gt;
	return (1 + Size(pTree-&amp;gt;m_left) + Size(pTree-&amp;gt;m_right));&lt;br /&gt;
}&lt;br /&gt;
bool Tree::Insert(const Student&amp;amp; student)&lt;br /&gt;
{&lt;br /&gt;
	return Insert(student,m_root);&lt;br /&gt;
}&lt;br /&gt;
bool Tree::Insert(const Student&amp;amp; student, TreeNode*&amp;amp; pTree)&lt;br /&gt;
{&lt;br /&gt;
	if(pTree == 0)&lt;br /&gt;
		pTree = new TreeNode(student);&lt;br /&gt;
&lt;br /&gt;
	else if(student.getID() &amp;lt; pTree-&amp;gt;m_student.getID())&lt;br /&gt;
	{&lt;br /&gt;
		Insert(student, pTree-&amp;gt;m_left);&lt;br /&gt;
	}&lt;br /&gt;
	else&lt;br /&gt;
	{&lt;br /&gt;
		Insert(student, pTree-&amp;gt;m_right);&lt;br /&gt;
	}&lt;br /&gt;
	return true;&lt;br /&gt;
}&lt;br /&gt;
bool Tree::Delete(int id)&lt;br /&gt;
{&lt;br /&gt;
	return Delete(id,m_root);&lt;br /&gt;
}&lt;br /&gt;
bool Tree::Delete(int id, TreeNode*&amp;amp; pTree)&lt;br /&gt;
{&lt;br /&gt;
	if(pTree == 0)&lt;br /&gt;
		return false;&lt;br /&gt;
	else if(id == pTree-&amp;gt;m_student.getID())&lt;br /&gt;
	{&lt;br /&gt;
		DeleteNode(pTree);&lt;br /&gt;
		return true;&lt;br /&gt;
	}&lt;br /&gt;
	else if(id &amp;gt; pTree-&amp;gt;m_student.getID())&lt;br /&gt;
		return Delete(id,pTree-&amp;gt;m_right);&lt;br /&gt;
	else&lt;br /&gt;
		return Delete(id,pTree-&amp;gt;m_left);&lt;br /&gt;
}&lt;br /&gt;
void Tree::DeleteNode(TreeNode*&amp;amp; pTree) //pass in id?&lt;br /&gt;
{&lt;br /&gt;
	cout&amp;lt;&amp;lt;&amp;quot;Deleting node with ID &amp;quot;&amp;lt;&amp;lt;pTree-&amp;gt;m_student.getID()&amp;lt;&amp;lt;endl;&lt;br /&gt;
	TreeNode* temp = pTree;&lt;br /&gt;
&lt;br /&gt;
	if(pTree-&amp;gt;m_left == 0)&lt;br /&gt;
	{&lt;br /&gt;
		pTree = pTree-&amp;gt;m_right;&lt;br /&gt;
		delete temp;&lt;br /&gt;
	}&lt;br /&gt;
	else if(pTree-&amp;gt;m_right == 0)&lt;br /&gt;
	{&lt;br /&gt;
		pTree = pTree-&amp;gt;m_left;&lt;br /&gt;
		delete temp;&lt;br /&gt;
	}&lt;br /&gt;
	else&lt;br /&gt;
	{&lt;br /&gt;
		//get appropriate data&lt;br /&gt;
		int id = pTree-&amp;gt;m_student.getID();&lt;br /&gt;
		GetPredecessor(id,pTree-&amp;gt;m_left);&lt;br /&gt;
		//pTree-&amp;gt;m_student.getID() = id;&lt;br /&gt;
		Delete(id,pTree-&amp;gt;m_left);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
void Tree::GetPredecessor(int id, TreeNode* pTree) //change to id //&amp;amp;id //student?&lt;br /&gt;
{&lt;br /&gt;
	while(pTree-&amp;gt;m_right != 0)&lt;br /&gt;
	{&lt;br /&gt;
		pTree = pTree-&amp;gt;m_right;&lt;br /&gt;
	}&lt;br /&gt;
	//get the data, pTree-&amp;gt;m_student ?&lt;br /&gt;
	id = pTree-&amp;gt;m_student.getID();&lt;br /&gt;
}&lt;br /&gt;
bool Tree::Lookup(Student&amp;amp; student) const&lt;br /&gt;
{&lt;br /&gt;
	return Lookup(student,m_root);&lt;br /&gt;
}&lt;br /&gt;
bool Tree::Lookup(Student&amp;amp; student, TreeNode* pTree) const&lt;br /&gt;
{&lt;br /&gt;
	if(pTree == 0)&lt;br /&gt;
	{&lt;br /&gt;
		return false;&lt;br /&gt;
	}&lt;br /&gt;
	else if(student.getID() == pTree-&amp;gt;m_student.getID())&lt;br /&gt;
	{&lt;br /&gt;
		student = pTree-&amp;gt;m_student;&lt;br /&gt;
	&lt;br /&gt;
		cout&amp;lt;&amp;lt;setw(15)&amp;lt;&amp;lt;&amp;quot;Name&amp;quot;&amp;lt;&amp;lt;setw(15)&amp;lt;&amp;lt;&amp;quot;Major&amp;quot;&amp;lt;&amp;lt;setw(15)&amp;lt;&amp;lt;&amp;quot;Age&amp;quot;&amp;lt;&amp;lt;setw(23)&amp;lt;&amp;lt;&amp;quot;Test Scores&amp;quot;&amp;lt;&amp;lt;setw(13)&amp;lt;&amp;lt;&amp;quot;ID&amp;quot;&amp;lt;&amp;lt;endl;&lt;br /&gt;
		cout&amp;lt;&amp;lt;&amp;quot;====================================================================================&amp;quot;&amp;lt;&amp;lt;endl;&lt;br /&gt;
		pTree-&amp;gt;m_student.writeToScreen();&lt;br /&gt;
		return true;&lt;br /&gt;
	}&lt;br /&gt;
	else if(student.getID() &amp;lt; pTree-&amp;gt;m_student.getID())&lt;br /&gt;
	{&lt;br /&gt;
		return Lookup(student,pTree-&amp;gt;m_left);&lt;br /&gt;
	}&lt;br /&gt;
	else&lt;br /&gt;
	{&lt;br /&gt;
		return Lookup(student,pTree-&amp;gt;m_right);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
ostream&amp;amp; operator&amp;lt;&amp;lt;(ostream&amp;amp; os, const Tree&amp;amp; tree)&lt;br /&gt;
{&lt;br /&gt;
	tree.Print();&lt;br /&gt;
	return os;&lt;br /&gt;
}&lt;br /&gt;
void Tree::Print() const&lt;br /&gt;
{&lt;br /&gt;
	Print(m_root);&lt;br /&gt;
}&lt;br /&gt;
void Tree::Print(ostream&amp;amp; os, TreeNode* pTree) const //print in order&lt;br /&gt;
{&lt;br /&gt;
	if(pTree == 0)&lt;br /&gt;
		return;&lt;br /&gt;
	this-&amp;gt;Print(os,pTree-&amp;gt;m_left);&lt;br /&gt;
	os&amp;lt;&amp;lt;*pTree;&lt;br /&gt;
	//os&amp;lt;&amp;lt;pTree-&amp;gt;m_student.writeToScreen();&lt;br /&gt;
	//os&amp;lt;&amp;lt;pTree-&amp;gt;m_student;&lt;br /&gt;
	Print(os,pTree-&amp;gt;m_right);&lt;br /&gt;
}&lt;br /&gt;
void Tree::Print(TreeNode* pTree) const //rework?&lt;br /&gt;
{&lt;br /&gt;
	//static int level = 0;&lt;br /&gt;
	//level++;&lt;br /&gt;
	if(pTree == 0)&lt;br /&gt;
	{&lt;br /&gt;
		//level--;&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
	//for(int i = 0; i &amp;lt;= level; i++)&lt;br /&gt;
		//cout&amp;lt;&amp;lt;&amp;quot; &amp;quot;;&lt;br /&gt;
	//cout&amp;lt;&amp;lt;pTree-&amp;gt;m_student.getID()&amp;lt;&amp;lt;endl;&lt;br /&gt;
	pTree-&amp;gt;m_student.writeToScreen();&lt;br /&gt;
	//pTree-&amp;gt;m_student.writeToFile(os);&lt;br /&gt;
	Print(pTree-&amp;gt;m_left);&lt;br /&gt;
	Print(pTree-&amp;gt;m_right);&lt;br /&gt;
	//level--;&lt;br /&gt;
}&lt;br /&gt;
void Tree::Clear()&lt;br /&gt;
{&lt;br /&gt;
	Clear(m_root);&lt;br /&gt;
}&lt;br /&gt;
void Tree::Clear(TreeNode* pTree)&lt;br /&gt;
{&lt;br /&gt;
	if(pTree == 0)&lt;br /&gt;
		return;&lt;br /&gt;
	Clear(pTree-&amp;gt;m_left);&lt;br /&gt;
	Clear(pTree-&amp;gt;m_right);&lt;br /&gt;
	delete pTree;&lt;br /&gt;
}&lt;br /&gt;
void Tree::Copy(const Tree&amp;amp; tree2)&lt;br /&gt;
{&lt;br /&gt;
	Copy(m_root, tree2.m_root);&lt;br /&gt;
}&lt;br /&gt;
void Tree::Copy(TreeNode*&amp;amp; pThis, TreeNode* pTree2)&lt;br /&gt;
{&lt;br /&gt;
	if(pTree2 == 0)&lt;br /&gt;
	{&lt;br /&gt;
		pThis = 0;&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
	else&lt;br /&gt;
	{&lt;br /&gt;
		pThis = new TreeNode(pTree2-&amp;gt;m_student);&lt;br /&gt;
		pThis-&amp;gt;m_student = pTree2-&amp;gt;m_student;&lt;br /&gt;
		Copy(pThis-&amp;gt;m_left, pTree2-&amp;gt;m_left);&lt;br /&gt;
		Copy(pThis-&amp;gt;m_right, pTree2-&amp;gt;m_right);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
Tree&amp;amp; Tree::operator=(const Tree&amp;amp; tree2)&lt;br /&gt;
{&lt;br /&gt;
	if(this != &amp;amp;tree2)&lt;br /&gt;
	{&lt;br /&gt;
		Clear();&lt;br /&gt;
		Copy(tree2);&lt;br /&gt;
	}&lt;br /&gt;
	return *this;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Main.cpp==&lt;br /&gt;
&amp;lt;pre&amp;gt;#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;fstream&amp;gt;&lt;br /&gt;
#include &amp;lt;iomanip&amp;gt;&lt;br /&gt;
#include &amp;lt;string&amp;gt;&lt;br /&gt;
#include &amp;quot;Tree.h&amp;quot;&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
void clearScreen();&lt;br /&gt;
//Purpose:To clear the screen.&lt;br /&gt;
//Precondition:None&lt;br /&gt;
//Postcondition:Screen is cleared.&lt;br /&gt;
char displayMenuAndGetSelection();&lt;br /&gt;
//Purpose:To display the menu and get the selection for searching.&lt;br /&gt;
//Precondition:None&lt;br /&gt;
//Postcondition:Search choice is entered and appropriate function is called.&lt;br /&gt;
void Pause();&lt;br /&gt;
//Purpose:To pause the program and allow the user a break.&lt;br /&gt;
//Precondition:None&lt;br /&gt;
//Postcondition:None&lt;br /&gt;
void quitProgram();&lt;br /&gt;
//Purpose:To inform the user the program has been terminated.&lt;br /&gt;
//Precondition:Correct choice is selected from the menu.&lt;br /&gt;
//Postcondition:Program terminated.&lt;br /&gt;
void Header();&lt;br /&gt;
//Purpose:&lt;br /&gt;
//Precondition:&lt;br /&gt;
//Postcondition:&lt;br /&gt;
void doInsert(Tree&amp;amp; tree);&lt;br /&gt;
//Purpose:&lt;br /&gt;
//Precondition:&lt;br /&gt;
//Postcondition:&lt;br /&gt;
void doDelete(Tree&amp;amp; tree);&lt;br /&gt;
//Purpose:&lt;br /&gt;
//Precondition:&lt;br /&gt;
//Postcondition:&lt;br /&gt;
void doSearch(Tree&amp;amp; tree);&lt;br /&gt;
//Purpose:&lt;br /&gt;
//Precondition:&lt;br /&gt;
//Postcondition:&lt;br /&gt;
&lt;br /&gt;
void main()&lt;br /&gt;
{&lt;br /&gt;
	bool done = false;&lt;br /&gt;
	&lt;br /&gt;
	Tree tree1;&lt;br /&gt;
	Tree tree3;&lt;br /&gt;
	Student s1;&lt;br /&gt;
&lt;br /&gt;
	s1.readFromKeyboard();&lt;br /&gt;
	s1.writeToKeyboard();&lt;br /&gt;
	cin.get();&lt;br /&gt;
&lt;br /&gt;
	int t[3] = {80,90,100};&lt;br /&gt;
	tree1.Insert(Student(&amp;quot;John&amp;quot;,23,&amp;quot;Biology&amp;quot;,t,1234));&lt;br /&gt;
	tree1.Insert(Student(&amp;quot;Carl&amp;quot;,67,&amp;quot;Business&amp;quot;,t,7777));&lt;br /&gt;
	tree1.Insert(Student(&amp;quot;Barry&amp;quot;,27,&amp;quot;Economics&amp;quot;,t,9801));&lt;br /&gt;
	tree1.Insert(Student(&amp;quot;Mary&amp;quot;,45,&amp;quot;Nursing&amp;quot;,t,1001));&lt;br /&gt;
	tree1.Insert(Student(&amp;quot;Dexter&amp;quot;,35,&amp;quot;Physics&amp;quot;,t,5747));&lt;br /&gt;
	tree1.Insert(Student(&amp;quot;Manslowe&amp;quot;,17,&amp;quot;Mathematics&amp;quot;,t,1999));&lt;br /&gt;
	tree1.Insert(Student(s1));&lt;br /&gt;
&lt;br /&gt;
	cout&amp;lt;&amp;lt;&amp;quot;---Tree 1---&amp;quot;&amp;lt;&amp;lt;endl;&lt;br /&gt;
	Header();&lt;br /&gt;
	tree1.Print();&lt;br /&gt;
&lt;br /&gt;
        Tree tree2(tree1);&lt;br /&gt;
	tree3 = tree1;&lt;br /&gt;
&lt;br /&gt;
	cout&amp;lt;&amp;lt;&amp;quot;---Tree 3---&amp;quot;&amp;lt;&amp;lt;endl;&lt;br /&gt;
	Header();&lt;br /&gt;
	cout&amp;lt;&amp;lt;tree3;&lt;br /&gt;
&lt;br /&gt;
	//create output file menu option .open(c_str())&lt;br /&gt;
	Pause();&lt;br /&gt;
	while(!done)&lt;br /&gt;
	{&lt;br /&gt;
		char menuChoice = ' ';&lt;br /&gt;
&lt;br /&gt;
		menuChoice = displayMenuAndGetSelection();&lt;br /&gt;
		clearScreen();&lt;br /&gt;
		switch(menuChoice)&lt;br /&gt;
		{&lt;br /&gt;
			case '1':&lt;br /&gt;
				Header();&lt;br /&gt;
				tree1.Print();&lt;br /&gt;
				Pause();&lt;br /&gt;
				done = false;&lt;br /&gt;
				break;&lt;br /&gt;
			case '2':&lt;br /&gt;
				doInsert(tree1);&lt;br /&gt;
				Pause();&lt;br /&gt;
				done = false;&lt;br /&gt;
				break;&lt;br /&gt;
			case '3':&lt;br /&gt;
				doDelete(tree1); //delete does not delete the top node correctly.&lt;br /&gt;
				Pause();&lt;br /&gt;
				done = false;&lt;br /&gt;
				break;&lt;br /&gt;
			case '4':&lt;br /&gt;
				doSearch(tree1);&lt;br /&gt;
				Pause();&lt;br /&gt;
				done = false;&lt;br /&gt;
				break;&lt;br /&gt;
			case '5':&lt;br /&gt;
				cout&amp;lt;&amp;lt;&amp;quot;The size of the tree is &amp;quot;&amp;lt;&amp;lt;tree1.Size()&amp;lt;&amp;lt;&amp;quot; leaves long.&amp;quot;&amp;lt;&amp;lt;endl;&lt;br /&gt;
				Pause();&lt;br /&gt;
				done = false;&lt;br /&gt;
				break;&lt;br /&gt;
			case '6':&lt;br /&gt;
				quitProgram();&lt;br /&gt;
				done = true;&lt;br /&gt;
				break;&lt;br /&gt;
			default:&lt;br /&gt;
				cout&amp;lt;&amp;lt;&amp;quot;Incorrect choice selected&amp;quot;&amp;lt;&amp;lt;endl;&lt;br /&gt;
				Pause();&lt;br /&gt;
				done = false;&lt;br /&gt;
				break;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
void clearScreen()&lt;br /&gt;
{&lt;br /&gt;
	system(&amp;quot;cls&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
char displayMenuAndGetSelection()&lt;br /&gt;
{&lt;br /&gt;
	char choice;&lt;br /&gt;
	clearScreen();&lt;br /&gt;
	cout&amp;lt;&amp;lt;endl&amp;lt;&amp;lt;endl&amp;lt;&amp;lt;endl;&lt;br /&gt;
	cout&amp;lt;&amp;lt;&amp;quot;'1' -- View the tree.&amp;quot;&amp;lt;&amp;lt;endl&amp;lt;&amp;lt;endl;&lt;br /&gt;
	cout&amp;lt;&amp;lt;&amp;quot;'2' -- Insert a new person's information into the tree.&amp;quot;&amp;lt;&amp;lt;endl&amp;lt;&amp;lt;endl;&lt;br /&gt;
	cout&amp;lt;&amp;lt;&amp;quot;'3' -- Delete a person's information from the tree.&amp;quot;&amp;lt;&amp;lt;endl&amp;lt;&amp;lt;endl;&lt;br /&gt;
	cout&amp;lt;&amp;lt;&amp;quot;'4' -- Search the tree.&amp;quot;&amp;lt;&amp;lt;endl&amp;lt;&amp;lt;endl;&lt;br /&gt;
	cout&amp;lt;&amp;lt;&amp;quot;'5' -- Count the number of people in the tree.&amp;quot;&amp;lt;&amp;lt;endl&amp;lt;&amp;lt;endl;&lt;br /&gt;
	cout&amp;lt;&amp;lt;&amp;quot;'6' -- Quit the program.&amp;quot;&amp;lt;&amp;lt;endl&amp;lt;&amp;lt;endl;&lt;br /&gt;
	cin&amp;gt;&amp;gt;choice;&lt;br /&gt;
	cin.ignore(50,'\n');&lt;br /&gt;
	return choice;&lt;br /&gt;
}&lt;br /&gt;
void Pause()&lt;br /&gt;
{&lt;br /&gt;
	cout&amp;lt;&amp;lt;endl&amp;lt;&amp;lt;&amp;quot;Press 'ENTER' to continue...&amp;quot;&amp;lt;&amp;lt;endl;&lt;br /&gt;
	cin.get();&lt;br /&gt;
}&lt;br /&gt;
void quitProgram()&lt;br /&gt;
{&lt;br /&gt;
	cout&amp;lt;&amp;lt;&amp;quot;Program terminated, good bye!&amp;quot;&amp;lt;&amp;lt;endl;&lt;br /&gt;
}&lt;br /&gt;
void Header()&lt;br /&gt;
{&lt;br /&gt;
	cout&amp;lt;&amp;lt;setw(15)&amp;lt;&amp;lt;&amp;quot;Name&amp;quot;&amp;lt;&amp;lt;setw(15)&amp;lt;&amp;lt;&amp;quot;Major&amp;quot;&amp;lt;&amp;lt;setw(15)&amp;lt;&amp;lt;&amp;quot;Age&amp;quot;&amp;lt;&amp;lt;setw(23)&amp;lt;&amp;lt;&amp;quot;Test Scores&amp;quot;&amp;lt;&amp;lt;setw(13)&amp;lt;&amp;lt;&amp;quot;ID&amp;quot;&amp;lt;&amp;lt;endl;&lt;br /&gt;
	cout&amp;lt;&amp;lt;&amp;quot;====================================================================================&amp;quot;&amp;lt;&amp;lt;endl;&lt;br /&gt;
}&lt;br /&gt;
void doInsert(Tree&amp;amp; tree)&lt;br /&gt;
{&lt;br /&gt;
	string name, major;&lt;br /&gt;
	int age, id, test[3];&lt;br /&gt;
&lt;br /&gt;
	cout&amp;lt;&amp;lt;&amp;quot;Please enter the name of the student: &amp;quot;;&lt;br /&gt;
	cin&amp;gt;&amp;gt;name;&lt;br /&gt;
	cout&amp;lt;&amp;lt;&amp;quot;Please enter the age of the student: &amp;quot;;&lt;br /&gt;
	cin&amp;gt;&amp;gt;age;&lt;br /&gt;
	cout&amp;lt;&amp;lt;&amp;quot;Please enter the major of the student: &amp;quot;;&lt;br /&gt;
	cin&amp;gt;&amp;gt;major;&lt;br /&gt;
	cout&amp;lt;&amp;lt;&amp;quot;Please enter the three test scores of the student: &amp;quot;;&lt;br /&gt;
	cin&amp;gt;&amp;gt;test[0]&amp;gt;&amp;gt;test[1]&amp;gt;&amp;gt;test[2];&lt;br /&gt;
	cout&amp;lt;&amp;lt;&amp;quot;Please enter the ID of the student: &amp;quot;;&lt;br /&gt;
	cin&amp;gt;&amp;gt;id;&lt;br /&gt;
	tree.Insert(Student(name,age,major,test,id));&lt;br /&gt;
	cout&amp;lt;&amp;lt;&amp;quot;Insert has been performed.&amp;quot;&amp;lt;&amp;lt;endl;&lt;br /&gt;
	cin.get();&lt;br /&gt;
}&lt;br /&gt;
void doSearch(Tree&amp;amp; tree)&lt;br /&gt;
{&lt;br /&gt;
	string name, major;&lt;br /&gt;
	int age = 0;&lt;br /&gt;
	int id, test[3];&lt;br /&gt;
&lt;br /&gt;
	cout&amp;lt;&amp;lt;&amp;quot;Please enter the ID of the student you wish to find: &amp;quot;;&lt;br /&gt;
	cin&amp;gt;&amp;gt;id;&lt;br /&gt;
	if(tree.Lookup(Student(name,age,major,test,id)))&lt;br /&gt;
	{&lt;br /&gt;
		cout&amp;lt;&amp;lt;endl&amp;lt;&amp;lt;&amp;quot;The student has been found.&amp;quot;&amp;lt;&amp;lt;endl;&lt;br /&gt;
	}&lt;br /&gt;
	else&lt;br /&gt;
		cout&amp;lt;&amp;lt;&amp;quot;The student has not been found.&amp;quot;&amp;lt;&amp;lt;endl;&lt;br /&gt;
&lt;br /&gt;
	cout&amp;lt;&amp;lt;&amp;quot;The search has been performed.&amp;quot;&amp;lt;&amp;lt;endl;&lt;br /&gt;
	cin.get();&lt;br /&gt;
}&lt;br /&gt;
void doDelete(Tree&amp;amp; tree)&lt;br /&gt;
{&lt;br /&gt;
	int id;&lt;br /&gt;
&lt;br /&gt;
	cout&amp;lt;&amp;lt;&amp;quot;Please enter the ID of the student you wish to delete: &amp;quot;;&lt;br /&gt;
	cin&amp;gt;&amp;gt;id;&lt;br /&gt;
	if(tree.Delete(id))&lt;br /&gt;
		cout&amp;lt;&amp;lt;&amp;quot;Delete has been performed.&amp;quot;&amp;lt;&amp;lt;endl;&lt;br /&gt;
	else&lt;br /&gt;
		cout&amp;lt;&amp;lt;&amp;quot;Delete has not been performed.&amp;quot;&amp;lt;&amp;lt;endl;&lt;br /&gt;
	cin.get();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Derek Elder</name></author>
	</entry>
</feed>