#include "stringtree.h"
StringTree::StringTree()
{
root = NULL;
}
void StringTree::insert(string s)
{
Treenode* newnode = new Treenode(s);
if (root == NULL)
root = newnode;
else
insertintosubtree(root, newnode);
}
void StringTree::insertintosubtree(Treenode* subroot, Treenode* newnode)
{
if (newnode->data < subroot->data)
{
// insert on left
if (subroot->left == NULL)
subroot->left = newnode;
else
insertintosubtree(subroot->left, newnode);
}
else if (newnode->data > subroot->data)
{
// insert on right
if (subroot->right == NULL)
subroot->right = newnode;
else
insertintosubtree(subroot->right, newnode);
}
}
void StringTree::remove(string s)
{
// what if tree is empty?
if (root != NULL)
root = removetreenode(root, s);
}
Treenode* StringTree::removetreenode(Treenode* subroot, string s)
{
Treenode* forreturn;
if (subroot != NULL)
{
if (subroot->data == s)
{
// remove this node!
if (subroot->left == NULL)
forreturn = subroot->right;
// there is a left child
else if (subroot->right == NULL)
forreturn = subroot->left;
// there are two children
else
{
// go left, right, right ... until we find NULL
Treenode* temp = subroot->left;
while(temp->right != NULL)
temp = temp->right;
// replace that NULL with our right child
temp->right = subroot->right;
forreturn = subroot->left;
}
delete subroot;
return forreturn;
}
else if (s < subroot->data)
subroot->left = removetreenode(subroot->left, s);
else
subroot->right = removetreenode(subroot->right, s);
}
return subroot;
// what if the node to remove only has one child?
}
void StringTree::print()
{
if (root == NULL)
cout << "Empty Tree" << endl;
else
printsubtree(root, 0);
}
void StringTree::printsubtree(Treenode* subroot, int level)
{
if (subroot != NULL)
{
printsubtree(subroot->right, level + 1);
for (int i = 0; i < level; i++)
cout << " ";
cout << subroot->data << endl;
printsubtree(subroot->left, level + 1);
}
}
int main()
{
StringTree tree;
//tree.insert("Hello");
//tree.insert("Goodbye");
//tree.insert("You say...");
//tree.insert("I say...");
//tree.insert("The teacher is an obvious baby-boomer");
string userinput = "";
while (userinput != "quit")
{
cin >> userinput;
if (userinput == "insert")
{
cin >> userinput;
tree.insert(userinput);
}
else if (userinput == "remove")
{
cin >> userinput;
tree.remove(userinput);
}
cin.ignore(INT_MAX, '\n');
tree.print();
}
return 0;
}