<<>> #include using namespace std; class Node { public: static const int MAX_CHILDREN = 5; Node() {inUse = 0;} Node(string str) {inUse = 0; name = str;} ~Node(); void visit() { cout << name << endl;} string name; int inUse; Node* child[MAX_CHILDREN]; }; Node::~Node() { for (int i = 0; i < inUse; ++i) delete child[i]; } class Tree { public: static const int preOrder = 1; static const int postOrder = 2; Tree() {root = 0;} ~Tree() {if (root != 0) delete root;} Tree(string str) {root = new Node(str);} void traversal(int order) {traversal(root, order);} void addNode(Node* root, string name); //void addNode(string name) {addNode(root, name);} Node* findNode(string name) {findNode(root, name);} private: Node* findNode(Node* root, string name); void traversal(Node* ptr, int order); //void addNode(Node *, string name); Node* root; }; void Tree::addNode(Node* root, string name) { if (root->inUse <= root->MAX_CHILDREN) { root->inUse++; root->child[root->inUse] = new Node(name); } else { } } void Tree::traversal(Node *root, int order) { if (root == 0) if (order == preOrder) //cout << root->name << endl; root->visit(); for(int i = 0; i < root->inUse; i++) traversal(root->child[i], order); if (order == postOrder) //cout << root->name << endl; root->visit(); } Node* Tree::findNode(Node* root, string name) { Node* ptr = new Node; if (root->name == name) { ptr = root; return ptr; } for (int i = 0; i < root->inUse; i++) findNode(root->child[i], name); } <<>> #include "tree.cpp" using namespace std; const char addChar = 'A'; const char preChar = 'E'; const char postChar = 'O'; const char childChar = 'C'; const char descChar = 'D'; const char quitChar = 'Q'; char getCmd() { if (cin) { char cmd; cout << "Select function: "; if (cin >> cmd) { cin.sync(); return toupper(cmd); } else { cout << "Invalid option.\n"; } } return quitChar; } int main() { char cmd = getCmd(); string child; string parent; cout << "Enter the first name: "; getline (cin, child); cin.sync(); Tree aTree(child); Node* ptr = new Node; while (cin && cmd != quitChar) { switch (cmd) { case addChar: cout << "Enter name: "; getline (cin, child); cin.sync(); cout << "Enter parent's name: "; getline (cin, parent); cin.sync(); ptr = aTree.findNode(parent); aTree.addNode(ptr, child); case preChar: case postChar: case childChar: case descChar: default: cout << "No such command. Please try again.\n"; break; } cmd = getCmd(); } }