Ok so i have 2 programs due in 2 hours
I have everything working, or so i believe except throwing exceptions. I have no idea how to go about this and can not find anything useful. My teacher is long gone to bed lol so im in trouble
Anyone who could enlighten me on this would be a savior thank you. I understand what they need to do. Throwing and catching per-say. im just not sure on the actual code.
Here is the main program he provided. I realize this is long but I'm just flabbergausted on what to do
and here is the code im working onCode:/* To compile this program, do the following aCC olab10BSTreeMain.cpp BSTree.cpp To execute with test data file a.out < /nfshome/csal/public_html/spring.10/2170/olab10sp10.dat uses exceptions As always let me know if there are syntax errors in program */ #include <iostream> #include "BSTree.h" using namespace std; int main() { BSTree MyTree; // A binary search tree used in examples // See what happens when an empty tree is printed cout << "An empty tree:" << MyTree << "*" << endl; cout << "Count: " << MyTree.Count() << endl; try { cout << "First String: " << MyTree.First() << endl; } catch (NonExistent myexception) { cerr << "There are data itemd in the tree" << endl; } try { cout << "Last String: " << MyTree.Last() << endl; } catch (NonExistent myexception) { cerr << "There are data itemd in the tree" << endl; } cin >> MyTree; // read's into cout << "Tree after first read: " << MyTree << endl;; cout << "Count: " << MyTree.Count() << endl; try { cout << "First String: " << MyTree.First() << endl; } catch (NonExistent myexception) { cerr << "There are data itemd in the tree" << endl; } try { cout << "Last String: " << MyTree.Last() << endl; } catch (NonExistent myexception) { cerr << "There are data itemd in the tree" << endl; } MyTree.Insert("into"); // insert new root cout << "Tree after insert: " << MyTree << endl;; cin >> MyTree; // read's insert cout << "Tree after second read: " << MyTree << endl; // This does inorder traversal cout << "Count: " << MyTree.Count() << endl; try { cout << "First String: " << MyTree.First() << endl; } catch (NonExistent myexception) { cerr << "There are data itemd in the tree" << endl; } try { cout << "Last String: " << MyTree.Last() << endl; } catch (NonExistent myexception) { cerr << "There are data itemd in the tree" << endl; } cin >> MyTree; // read's into cin >> MyTree; // read's link cin >> MyTree; // read's list cout << "Tree after read: " << MyTree << endl; // This does inorder traversal cout << "Count: " << MyTree.Count() << endl; try { cout << "First String: " << MyTree.First() << endl; } catch (NonExistent myexception) { cerr << "There are data itemd in the tree" << endl; } try { cout << "Last String: " << MyTree.Last() << endl; } catch (NonExistent myexception) { cerr << "There are data itemd in the tree" << endl; } cin >> MyTree; // read one string into the tree cout << "Tree after read: " << MyTree << endl; // This does inorder traversal cout << "Count: " << MyTree.Count() << endl; try { cout << "First String: " << MyTree.First() << endl; } catch (NonExistent myexception) { cerr << "There are data itemd in the tree" << endl; } try { cout << "Last String: " << MyTree.Last() << endl; } catch (NonExistent myexception) { cerr << "There are data itemd in the tree" << endl; } cin >> MyTree; // read's next cin >> MyTree; // read's last cout << "Tree after read: " << MyTree << endl; // This does inorder traversal cout << "Count: " << MyTree.Count() << endl; try { cout << "First String: " << MyTree.First() << endl; } catch (NonExistent myexception) { cerr << "There are data itemd in the tree" << endl; } try { cout << "Last String: " << MyTree.Last() << endl; } catch (NonExistent myexception) { cerr << "There are data itemd in the tree" << endl; } cout << "Inorder traversal: " << endl; MyTree.InOrderTraversal(); cout << endl; cout << "Preorder traversal: " << endl; MyTree.PreOrderTraversal(); cout << endl; cout << "Postorder traversal: " << endl; MyTree.PostOrderTraversal(); cout << endl; cin >> MyTree; // read's link cin >> MyTree; // read's insurance cout << "Tree after read: " << MyTree << endl; // This does inorder traversal cout << "Count: " << MyTree.Count() << endl; try { cout << "First String: " << MyTree.First() << endl; } catch (NonExistent myexception) { cerr << "There are data itemd in the tree" << endl; } try { cout << "Last String: " << MyTree.Last() << endl; } catch (NonExistent myexception) { cerr << "There are data itemd in the tree" << endl; } cout << "Inorder traversal: " << endl; MyTree.InOrderTraversal(); cout << endl; cout << "Preorder traversal: " << endl; MyTree.PreOrderTraversal(); cout << endl; cout << "Postorder traversal: " << endl; MyTree.PostOrderTraversal(); cout << endl; cin >> MyTree; // read's help cin >> MyTree; // read's insert cout << "Tree after read: " << MyTree << endl; // This does inorder traversal cout << "Count: " << MyTree.Count() << endl; try { cout << "First String: " << MyTree.First() << endl; } catch (NonExistent myexception) { cerr << "There are data itemd in the tree" << endl; } try { cout << "Last String: " << MyTree.Last() << endl; } catch (NonExistent myexception) { cerr << "There are data itemd in the tree" << endl; } cout << "Inorder traversal: " << endl; MyTree.InOrderTraversal(); cout << endl; cout << "Preorder traversal: " << endl; MyTree.PreOrderTraversal(); cout << endl; cout << "Postorder traversal: " << endl; MyTree.PostOrderTraversal(); cout << endl; cout << "Count: " << MyTree.Count() << endl; try { cout << "First String: " << MyTree.First() << endl; } catch (NonExistent myexception) { cerr << "There are data itemd in the tree" << endl; } try { cout << "Last String: " << MyTree.Last() << endl; } catch (NonExistent myexception) { cerr << "There are data itemd in the tree" << endl; } cout << "Inorder traversal: " << endl; MyTree.InOrderTraversal(); cout << endl; cout << "Preorder traversal: " << endl; MyTree.PreOrderTraversal(); cout << endl; cout << "Postorder traversal: " << endl; MyTree.PostOrderTraversal(); cout << endl; cin >> MyTree; // read's justice cout << "Tree after read: " << MyTree << endl; // This does inorder traversal cout << "Count: " << MyTree.Count() << endl; try { cout << "First String: " << MyTree.First() << endl; } catch (NonExistent myexception) { cerr << "There are data itemd in the tree" << endl; } try { cout << "Last String: " << MyTree.Last() << endl; } catch (NonExistent myexception) { cerr << "There are data itemd in the tree" << endl; } cout << "Inorder traversal: " << endl; MyTree.InOrderTraversal(); cout << endl; cout << "Preorder traversal: " << endl; MyTree.PreOrderTraversal(); cout << endl; cout << "Postorder traversal: " << endl; MyTree.PostOrderTraversal(); cout << endl; cin >> MyTree; // read's just cout << "Tree after read: " << MyTree << endl; // This does inorder traversal cout << "Count: " << MyTree.Count() << endl; try { cout << "First String: " << MyTree.First() << endl; } catch (NonExistent myexception) { cerr << "There are data itemd in the tree" << endl; } try { cout << "Last String: " << MyTree.Last() << endl; } catch (NonExistent myexception) { cerr << "There are data itemd in the tree" << endl; } cout << "Inorder traversal: " << endl; MyTree.InOrderTraversal(); cout << endl; cout << "Preorder traversal: " << endl; MyTree.PreOrderTraversal(); cout << endl; cout << "Postorder traversal: " << endl; MyTree.PostOrderTraversal(); cout << endl; // test copy constructor BSTree CopyTree(MyTree); cout << "Copy Tree: " << CopyTree << endl;; cout << "end of main"<<endl; return 0; }
Code:#include <string> using namespace std; // THIS IS WHERE IM HAVING TROUBLE class myexception { public: void NonExistent(); }; struct node { string data; node *left; node *right; }; class BSTree { public: //Define deconstructor ~BSTree(); void DestroyTree(); void Insert(string); void Delete(string); void InOrderTraversal(); void PreOrderTraversal(); void PostOrderTraversal(); int Count(); string First(); string Last(); private: void DestroyTree(node *current); void InOrderTraversal(node *current); void PreOrderTraversal(node *current); void PostOrderTraversal(node *current); int Count(node *current); string First(node *current); string Last(node *current); node *root; }; void myexception::NonExistent() { cerr << "Error"; } BSTree::~BSTree() { DestroyTree(); } void BSTree::DestroyTree() { DestroyTree(root); } void BSTree::DestroyTree(node *current) { if (current != NULL) { DestroyTree(current->left); DestroyTree(current->right); delete current; } } void BSTree::Insert(string data) { node *current = new node; node *parent = new node; current = root; parent = NULL; while (current != NULL) { parent = current; if (data < current->data) { current = current->left; } else { current = current->right; } } if (parent == NULL) { root->data = data; } else if (data < parent->data) { parent->left->data = data; } else { parent->right->data = data; } } //In order public and private functions void BSTree::InOrderTraversal() { if (root == NULL) { return; } else { InOrderTraversal(root); } } void InOrderTraversal(node *current) { if (current == NULL) { return; } else { InOrderTraversal(current->left); cout << current->data; InOrderTraversal(current->right); } } //Post order public and private functions void BSTree::PostOrderTraversal() { if (root == NULL) { return; } else { PostOrderTraversal(root); } } void PostOrderTraversal(node *current) { if (current == NULL) { return; } else { PostOrderTraversal(current->left); PostOrderTraversal(current->right); cout << current->data; } } //Pre order public and private functions void BSTree::PreOrderTraversal() { if (root == NULL) { return; } else { PreOrderTraversal(root); } } void PreOrderTraversal(node *current) { if (current == NULL) { return; } else { cout << current->data; PreOrderTraversal(current->left); PreOrderTraversal(current->right); } } //Count functions int BSTree::Count() { if (root == NULL) { return 0; } else { Count(root); } } int Count(node *current) { if (current == NULL) { return 0; } else { int count = 1; count += Count(current->left); count += Count(current->right); return count; } } //Print first functions string BSTree::First() { if (root == NULL) { return 0; //throw NonExistent(); } else { First(root); } } //Print second functions string First(node *current) { if (current->left == NULL) { cout << current->left->data; } else { First(current->left); } } string BSTree::Last() { if (root = NULL) { return 0; //throw NonExistent(); } else { Last(root); } } string Last(node *current) { if (current->right == NULL) { cout << current->right->data; } else { First(current->right); } } void BSTree::Delete(string data) { bool found = false; if (root == NULL) { //exception } node *current = new node; node *parent = new node; current = root; while(current) { if(current->data == data) { found = true; break; } else { parent = current; if(current->data ==data) { current = current->right; } else { current = current->left; } } } if(!found) { //exception } // 3 cases : // 1. We're removing a leaf node // 2. We're removing a node with a single child // 3. we're removing a node with 2 children // Node with single child if((current->left == NULL && current->right != NULL) || (current->left != NULL && current->right == NULL)) { if(current->left == NULL && current->right != NULL) { if(parent->left == current) { parent->left = current->right; delete current; } else { parent->right = current->right; delete current; } } else // left child present, no right child { if(parent->left == current) { parent->left = current->left; delete current; } else { parent->right = current->left; delete current; } } return; } //We're looking at a leaf node if( current->left == NULL && current->right == NULL) { if(parent->left == current) { parent->left = NULL; } else { parent->right = NULL; } delete current; return; } //Node with 2 children // replace node with smallest value in right subtree if (current->left != NULL && current->right != NULL) { node *chkr = new node; chkr = current->right; if((chkr->left == NULL) && (chkr->right == NULL)) { current = chkr; delete chkr; current->right = NULL; } else // right child has children { //if the node's right child has a left child // Move all the way down left to locate smallest element if((current->right)->left != NULL) { node *lcurr = new node; node *lcurrp = new node; lcurrp = current->right; lcurr = (current->right)->left; while(lcurr->left != NULL) { lcurrp = lcurr; lcurr = lcurr->left; } current->data = lcurr->data; delete lcurr; lcurrp->left = NULL; } else { node *tmp = new node; tmp = current->right; current->data = tmp->data; current->right = tmp->right; delete tmp; } } return; } }



LinkBack URL
About LinkBacks





