OK, first of all, thanks to everyone who helped me out with my Isomorphism problem - it finally works. Now, the other part of my homework I'm having trouble with is this:
I don't want to post the whole code here - it's about 140 lines, and it would violate our homework policy.
Basically, it looks like my remove method is faulty; I'll include the struct definition, the class definition, and my two remove method definitions:
[CODE=cpp]
template <typename T>
struct TreeNode {
T data;
TreeNode *left, *right, *parent;
~TreeNode() {
delete left;
delete right;
parent = 0;
}
};
template <typename T>
class BSTreeSet {
/*friend ostream& operator<<(ostr eam& out, const BSTreeSet<T> BST) {
BST.inorderPrin t(out);
return out;
}*/
public:
BSTreeSet();
BSTreeSet(T initRoot);
~BSTreeSet() { delete root; }
bool insert(T obj);
void remove(T obj);
bool contains(T obj);
bool isEmpty() const { return root == NULL; };
void inorderPrint(os tream& out);
private:
bool insertHelper(Tr eeNode<T> *node, T obj);
void removeHelper(Tr eeNode<T> *node, T obj);
bool containsHelper( TreeNode<T> *node, T obj);
void IOPrint(TreeNod e<T> *node, ostream& out);
TreeNode<T> *root;
};
template <typename T>
void BSTreeSet<T>::r emove(T obj) {
return removeHelper(ro ot, obj);
}
template <typename T>
void BSTreeSet<T>::r emoveHelper(Tre eNode<T> *node, T obj) {
if (node == NULL) return;
if (node->data < obj) removeHelper(no de->right, obj);
else if (node->data > obj) removeHelper(no de->left, obj);
else if (node->left != NULL && node->right != NULL) {
TreeNode<T> *temp = node->right;
while (temp->left != NULL) temp = temp->left;
node->data = temp->data;
removeHelper(te mp, temp->data);
} else {
TreeNode<T> *old = node;
node = (node->left != NULL) ? node->left : node->right;
delete old;
}
}[/CODE]
My test program generates a tree at random and displays its contents (all of which seems to be properly functioning). I then intentionally insert the value 20, to test my contains() method and my remove() method. It looks like contains() works, but I get:
at that point in the program. Any ideas?
Originally posted by My Homework
Basically, it looks like my remove method is faulty; I'll include the struct definition, the class definition, and my two remove method definitions:
[CODE=cpp]
template <typename T>
struct TreeNode {
T data;
TreeNode *left, *right, *parent;
~TreeNode() {
delete left;
delete right;
parent = 0;
}
};
template <typename T>
class BSTreeSet {
/*friend ostream& operator<<(ostr eam& out, const BSTreeSet<T> BST) {
BST.inorderPrin t(out);
return out;
}*/
public:
BSTreeSet();
BSTreeSet(T initRoot);
~BSTreeSet() { delete root; }
bool insert(T obj);
void remove(T obj);
bool contains(T obj);
bool isEmpty() const { return root == NULL; };
void inorderPrint(os tream& out);
private:
bool insertHelper(Tr eeNode<T> *node, T obj);
void removeHelper(Tr eeNode<T> *node, T obj);
bool containsHelper( TreeNode<T> *node, T obj);
void IOPrint(TreeNod e<T> *node, ostream& out);
TreeNode<T> *root;
};
template <typename T>
void BSTreeSet<T>::r emove(T obj) {
return removeHelper(ro ot, obj);
}
template <typename T>
void BSTreeSet<T>::r emoveHelper(Tre eNode<T> *node, T obj) {
if (node == NULL) return;
if (node->data < obj) removeHelper(no de->right, obj);
else if (node->data > obj) removeHelper(no de->left, obj);
else if (node->left != NULL && node->right != NULL) {
TreeNode<T> *temp = node->right;
while (temp->left != NULL) temp = temp->left;
node->data = temp->data;
removeHelper(te mp, temp->data);
} else {
TreeNode<T> *old = node;
node = (node->left != NULL) ? node->left : node->right;
delete old;
}
}[/CODE]
My test program generates a tree at random and displays its contents (all of which seems to be properly functioning). I then intentionally insert the value 20, to test my contains() method and my remove() method. It looks like contains() works, but I get:
Originally posted by My Cygwin Shell
Comment