954,506 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

errors in code

I need help with the assignment operator and destructor, and the deleting by copy. Can someone help me with this? and when i compile just this i get an error on line 219 saying term does not evaluate to a function taking 0 arguments. Does anyone know what this means

<code>
&lt;pre&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
using namespace std;

// Node used in BST
struct BSTNode {
	int key;
	BSTNode* left;
	BSTNode* right;
};

// Binary Search Tree
class BST {
private:
	BSTNode* root;
	int size;

	bool insert (BSTNode* newNode);
	BSTNode** find (int key);
	void preOrderTraversal (BSTNode* subRoot);
	void inOrderTraversal (BSTNode* subRoot);
	void postOrderTraversal (BSTNode* subRoot);

public:
	// Managers
	BST ();
	BST (BST&amp;amp; bst);
	~BST ();
	BST&amp;amp; operator = (BST&amp;amp; bst);

	// Accessors
	bool isEmpty ();
	bool isFull ();
	void preOrderTraversal ();
	void inOrderTraversal ();
	void postOrderTraversal ();

	// Mutators
	bool insert (int key);
	bool deleteByMerge (int key);
	bool deleteByCopy (int key);
};

// default Constructor
BST::BST () {  
	root = NULL;
	size = 0;
}
// Copy Constructor
BST::BST (BST&amp;amp; bst) {
	root = bst.root;
	size = bst.size;
}

/*************************************/
// Destructor
BST::~BST () {
	// delete root until tree is empty
}

// Assignment Operator
BST&amp;amp; BST::operator = (BST&amp;amp; bst) {
	// ???
	return *this;
}
/***************************************/
// isEmpty: returns if tree is empty
bool BST::isEmpty () { 
	return !root;
}

// isFull: returns if memory is available
bool BST::isFull () {
	BSTNode* bogusNode = NULL;
	bogusNode = new BSTNode;
	if (bogusNode) {
		delete bogusNode;
		return false;
	}
	return true; // Note: nothing allocated
}

// insert (public): adds a node to tree given key data
bool BST::insert (int key) {
	if (isFull())
		return false;

	BSTNode* newNode = new BSTNode;
	newNode-&amp;gt;key = key;
	newNode-&amp;gt;left = NULL;
	newNode-&amp;gt;right = NULL;
	if (insert (newNode))
		return true;
	delete newNode;
	return false;
}

// insert (private): adds a node to tree given new-node
bool BST::insert (BSTNode* newNode) {
	BSTNode** walker = &amp;amp;root;
	while (*walker) {
		if ((*walker)-&amp;gt;key &amp;gt; newNode-&amp;gt;key)
			walker = &amp;amp;((*walker)-&amp;gt;left);
		else if ((*walker)-&amp;gt;key &amp;lt; newNode-&amp;gt;key)
			walker = &amp;amp;((*walker)-&amp;gt;right);
		else	// Duplicate of key found
			return false;
	}
	*walker = newNode;
	return true;
}

// find (private): returns dbl-pointer to target
BSTNode** BST::find (int key) {
	BSTNode** walker = &amp;amp;root;
	while (*walker) {
		if ((*walker)-&amp;gt;key == key)
			break;
		else if ((*walker)-&amp;gt;key &amp;gt; key)
			walker = &amp;amp;((*walker)-&amp;gt;left);
		else
			walker = &amp;amp;((*walker)-&amp;gt;right);
	}
	return walker; // Note: if *walker is NULL, key not found
}

// delete (public): using by-merge method: delete node containing key data
bool BST::deleteByMerge (int key) { 
	// find pointer to target deletion
	BSTNode** walker = find(key);

	// Determine whether key is found and deletion is to occur
	if (!(*walker)) 
		return false; // deletion failed - target not found
	// keep pointer to node for deletion
	BSTNode*  eliminationNode = *walker; 

	//CASE I - left-subtree exists
	if (eliminationNode-&amp;gt;left) {
		// find right-most child of left subtree
		BSTNode** rtMostOfLeftSubtree = &amp;amp;(eliminationNode-&amp;gt;left);
		while (*rtMostOfLeftSubtree) 
			rtMostOfLeftSubtree = &amp;amp;((*rtMostOfLeftSubtree)-&amp;gt;right);

		// link right-most child of left subtree to right of target deletion
		*rtMostOfLeftSubtree = eliminationNode-&amp;gt;right;

		// bypass target deletion
		*walker = eliminationNode-&amp;gt;left;
	}
	// CASE II - no left-subtree
	else {
		// bypass target deletion
		*walker = eliminationNode-&amp;gt;right;
	}

	// delete target
	delete eliminationNode;

	// return success of deletion
	return true; // deletion successful
}

/****************************/
// delete (public): using by-copy method: delete node containing key data
bool BST::deleteByCopy (int key) {
	// Use code from deleteByMerge where appropriate

	// CASE I   - target has no children
	// CASE II  - target has left child, but no right child
	// CASE III - target has right child, but no left child
	// CASE IV  - target has two children

	// return success of deletion
	return true; // deletion successful
}

// preOrderTraversal (public): calls private preOrderTraversal
void BST::preOrderTraversal () {
	cout &amp;lt;&amp;lt; &amp;quot;Pre-Order Traversal&amp;quot; &amp;lt;&amp;lt; endl;
	preOrderTraversal(root);
	cout &amp;lt;&amp;lt; &amp;quot;\b\b  &amp;quot; &amp;lt;&amp;lt; endl &amp;lt;&amp;lt; endl;
}

// preOrderTraversal (private): traverses tree by preOrder 
void BST::preOrderTraversal (BSTNode* subRoot) {
	// base case
	if (!subRoot)
		return;

	// recursive method
	// process node
	cout &amp;lt;&amp;lt; subRoot-&amp;gt;key &amp;lt;&amp;lt; &amp;quot;, &amp;quot;;
	// move left
	preOrderTraversal(subRoot-&amp;gt;left);
	// move right
	preOrderTraversal(subRoot-&amp;gt;right);
}

// inOrderTraversal (public): calls private inOrderTraversal
void BST::inOrderTraversal () {	
	cout &amp;lt;&amp;lt; &amp;quot;In-Order Traversal&amp;quot; &amp;lt;&amp;lt; endl;
	inOrderTraversal(root);
	cout &amp;lt;&amp;lt; &amp;quot;\b\b  &amp;quot; &amp;lt;&amp;lt; endl &amp;lt;&amp;lt; endl;
}
// inOrderTraversal (private): traverses tree by inOrder
void BST::inOrderTraversal (BSTNode* subRoot) {
		//base case
	if (subRoot == NULL)
		return;
	//rec case

	//go right
	inOrderTraversal(subRoot-&amp;gt;left());
	//go left
	cout &amp;lt;&amp;lt; subRoot-&amp;gt;key &amp;lt;&amp;lt; &amp;quot;, &amp;quot;;
	//process
	inOrderTraversal(subRoot-&amp;gt;right());
}

// postOrderTraversal (public): calls private postOrderTraversal
void BST::postOrderTraversal () {
	cout &amp;lt;&amp;lt; &amp;quot;Post-Order Traversal&amp;quot; &amp;lt;&amp;lt; endl;
	postOrderTraversal(root);
	cout &amp;lt;&amp;lt; &amp;quot;\b\b  &amp;quot; &amp;lt;&amp;lt; endl &amp;lt;&amp;lt; endl;
}
// postOrderTraversal (private): traverses tree by postOrder
void BST::postOrderTraversal (BSTNode* subRoot) {
		//base case
	if (subRoot == NULL)
		return;
	//rec case
	
	//go left
	postOrderTraversal(subRoot-&amp;gt;left());
	//go right
	postOrderTraversal(subRoot-&amp;gt;right());

	cout &amp;lt;&amp;lt; subRoot-&amp;gt;key &amp;lt;&amp;lt; &amp;quot;, &amp;quot;;

}

/****************************/
void main () {
	BST bst;
	bst.insert(5);
	bst.insert(10);
	bst.insert(3);
	bst.insert(4);
	bst.insert(9);
	bst.insert(7);
	bst.insert(8);
	bst.preOrderTraversal();
	bst.inOrderTraversal();
	bst.postOrderTraversal();

}&lt;/code&gt;&lt;/pre&gt;</code>
chubbywubba
Newbie Poster
22 posts since Oct 2006
Reputation Points: 10
Solved Threads: 0
 

line 235 (as posted here): left is not a function or a function pointer so you have to remove the parentheses postOrderTraversal(subRoot->left);

Ancient Dragon
Retired & Loving It
Team Colleague
30,049 posts since Aug 2005
Reputation Points: 5,662
Solved Threads: 2,343
 

This article has been dead for over three months

Post: Markdown Syntax: Formatting Help
You