// Corey Williams // COP3530 01Z // Project 10 /* Extend the application developed for Project 9 by adding features to “Display all Binary Tree Objects (preorder traversal), “Display all Binary Tree Objects (inorder traversal), “Display all Binary Tree Objects (postorder traversal), and “Delete a Node”. The application must provide a menu for all tasks. Add Circle Object to Binary Tree Search for Circle Object in Binary Tree Display all Binary Tree Circle Objects (preorder traversal) Display all Binary Tree Circle Objects (inorder traversal) Display all Binary Tree Circle Objects (postorder traversal) Delete a Node Exit */ using namespace std; #include #include "circle10.h" #include "genBST10.h" #include void menu_addObj(BST& circleTree) { string s; system("cls"); cout << "Enter a number to add a circle of that radius to the tree" << endl << "or enter q to return to the main menu." << endl; while (s != "q" and s != "Q") { cout << endl << "Input: "; cin >> s; try { Circle tmp(stod(s)); circleTree.insert(tmp); cout << "Circle of radius " << s << " added to tree." << endl; } catch (...) { cout << "Not a valid entry, please try again. " << endl; continue; } } } void menu_search(BST& circleTree) { string s; system("cls"); cout << "Enter a radius, and a search will be conducted to find a matching element" << endl << "or enter q to return to the main menu." << endl; while (s != "q" and s != "Q") { cout << endl << "Search Criteria: "; cin >> s; try { Circle tmp(stod(s)); if (circleTree.search(tmp)) cout << "A circle of radius " << s << " exists in the tree." << endl; else cout << "No objects with radius " << s << " exist in the tree." << endl; } catch (...) { cout << "Not a valid entry, please try again. " << endl; continue; } } } void menu_displayTreePreorder(BST& circleTree) { system("cls"); cout << "Tree Objects in Preorder Traversal are:" << endl; circleTree.preorder(); system("pause"); } void menu_displayTreeInorder(BST& circleTree) { system("cls"); cout << "Tree Objects in Inorder Traversal are:" << endl; circleTree.inorder(); system("pause"); } void menu_displayTreePostorder(BST& circleTree) { system("cls"); cout << "Tree Objects in Postorder Traversal are:" << endl; circleTree.postorder(); system("pause"); } void menu_deleteNode(BST& circleTree) { string s; system("cls"); cout << "Enter a radius for a circle that you would like to delete from the tree" << endl << "or enter q to return to the main menu." << endl; while (s != "q" and s != "Q") { cout << endl << "Radius for circle to delete: "; cin >> s; try { Circle tmp(stod(s)); circleTree.findAndDeleteByCopying(tmp); } catch (...) { cout << "Not a valid entry, please try again. " << endl; continue; } } } int main() { BST circleTree; string menuOpt; while (true) { system("cls"); //Display main options menu cout << "Main Menu" << endl << "1. Add Circle Object to Binary Tree" << endl << "2. Search for Circle Object in Binary Tree" << endl << "3. Display All Binary Tree Circle Objects (preorder traversal)" << endl << "4. Display All Binary Tree Circle Objects (inorder traversal)" << endl << "5. Display All Binary Tree Circle Objects (postorder traversal)" << endl << "6. Delete a node" << endl << "7. Exit Application" << endl << endl << "Enter an Option: "; cin >> menuOpt; if (menuOpt == "1") menu_addObj(circleTree); else if (menuOpt == "2") menu_search(circleTree); else if (menuOpt == "3") menu_displayTreePreorder(circleTree); else if (menuOpt == "4") menu_displayTreeInorder(circleTree); else if (menuOpt == "5") menu_displayTreePostorder(circleTree); else if (menuOpt == "6") menu_deleteNode(circleTree); else if (menuOpt == "7" or menuOpt == "q") return 0; else { cout << endl << "Not a valid selection. "; system("pause"); } } }