The two classes from the bintree3.cpp program are displayed below. Please add another method to the BT class which will count the number of active nodes that are included in the current binary tree and will propagate that count to the calling program. The method will have the name countNodes and it will have one parameter whose variable type will be determined by you. Please write its signature line for the Queue class definition and write its full method definition separately.
#include <iostream>
#include <cstdlib>
#include <string>
using namespace std;
I am very new at this so any help is greatly appreciated to get me off on the right foot, thanks!Code:class Node { private: string val; // current value in collating sequence Node* lh; // pointer to left-hand descendant Node Node* rh; // pointer to right-hand descendant Node public: Node () { lh = rh = NULL; val = '\0'; } // Node () {} void putVal (string v) { val = v; } string getVal () { return val; } void putLH (Node* x) { lh = x; } Node* getLH () { return lh; } void putRH (Node* x) { rh = x; } Node* getRH () { return rh; } void write (void) { cout << " " << val; } }; class BT { private: int count; Node* root; Node* tree; Node* addNode (Node*, string); Node* findInsertion (Node* tree, string v); void inOrder (Node*); void preOrder (Node*); void postOrder (Node*); void locate (Node*, string); public: BT (); void addNodeRoot (string); void inOrderTraverse (); void preOrderTraverse (); void postOrderTraverse (); int getCount () { return count; } void locateRoot (string); }; BT::BT () { root = tree = NULL; count = 0; } // BT::BT () {} void BT::addNodeRoot (string v) { if (root == NULL) {root = tree = addNode (tree, v); // cout << "ptr to root " << root << endl; } else { tree = root; tree = findInsertion (tree, v); } } void BT::locateRoot (string v) { if ( root == NULL ) cout << "Tree is empty" << endl; else locate ( root, v ); } void BT::locate (Node* y, string v) { // Bug mentioned by Dan Glade string x; x = y -> getVal (); if ( v == x ) cout << "Value " << v << " is in Node at address " << (int)y << endl; else if ( v <= x ) if ( y -> getLH() != NULL ) locate (y-> getLH(), v); else cout << "Value not in tree" << endl; else // if ( v > x ) if ( y -> getRH() != NULL ) locate ( y-> getRH(), v ); else cout << "Value not in tree" << endl; } Node* BT::findInsertion (Node* tree, string v) { string x; x = tree -> getVal(); // cout << count << " compare " << v << " and " << x << endl; if ( v <= x ) if( tree -> getLH () !=NULL ) tree = findInsertion (tree -> getLH(), v); else { Node* temp = NULL; temp = addNode (temp, v); tree ->putLH(temp); } if ( v > x ) if (tree -> getRH () !=NULL ) tree = findInsertion (tree -> getRH(), v); else { Node* temp = NULL; temp = addNode (temp, v); tree ->putRH(temp); } return tree; } Node* BT::addNode (Node* x, string v) { if (x = new Node) { x->putVal (v); ++count; // cout << count << " " << x << " " << x->getVal () << endl; x->putLH(NULL); x->putRH(NULL); } return x; } void BT::inOrderTraverse () { tree = root; inOrder (root); } void BT::inOrder (Node* n) { if (n == NULL) return; inOrder (n->getLH()); n->write (); inOrder (n->getRH()); } void BT::preOrderTraverse () { tree = root; preOrder (root); } void BT::preOrder (Node* n) { if (n == NULL) return; n->write (); preOrder (n->getLH()); preOrder (n->getRH()); } void BT::postOrderTraverse () { tree = root; postOrder (root); } void BT::postOrder (Node* n) { if (n == NULL) return; postOrder (n->getLH()); postOrder (n->getRH()); n->write (); } int main () { string x; BT TREE; Node* test; // Create inorder Binary treee cout << "To create your Binary tree, enter each " << "character of your list" << endl; cout << "To terminate your list hit <Enter> then control-z <Enter>" << endl; while (!cin.eof()) { cin >> x; if (!cin.eof()) TREE.addNodeRoot (x); } if ( TREE.getCount ()) { cout << endl << "In-Order Tree Traversal" << endl; TREE.inOrderTraverse (); cout << endl; cout << "Pre-Order Tree Traversal" << endl; TREE.preOrderTraverse(); cout << endl; cout << "Post-Order Tree Traversal" << endl; TREE.postOrderTraverse(); cout << endl << "Enter User value of Node to locate "; cin.clear(); cin >> x; if (!cin.eof()) TREE.locateRoot ( x ); } else cout << endl << "Tree is empty. No characters found."; cout << endl; system("PAUSE"); return EXIT_SUCCESS; }![]()



LinkBack URL
About LinkBacks



