Hey,
I've had this problem before with linked list and never really managed to solve it.
I have a generic Tree class which has a nested Node class. For my assignment Node must be nested.
I have a SearchTree class which inherits from Tree, but yet every time I try using a Node in SearchTree it says that Node is undefined. Any idea how to solve this?
Thanks
#include "Tree.h"
usingnamespace std;
//----------------------------------------------------------
// class Tree implementation
//----------------------------------------------------------
template <class T>
Tree<T>::~Tree() // deallocate tree
{
if (root != nullptr)
clear(root);
}
template <class T>
void Tree<T>::clear(Node * current)
{
if (current)
{ // Release memory associated with children
if (current->left)
clear(current->left);
if (current->right)
clear(current->right);
delete current;
}
}
template <class T>
bool Tree<T>::isEmpty() const
{
return root == nullptr;
}
// preOrder processing of tree rooted at current
template <class T>
void Tree<T>::preOrder(Node * current)
{ // visit Node, left child, right child
if (current)
{ // process current Node
process(current->value);
// then visit children
preOrder(current->left);
preOrder(current->right);
}
}
// inOrder processing of tree rooted at current
template <class T>
void Tree<T>::inOrder(Node * current)
{ // visit left child, Node, right child
if (current)
{
inOrder(current->left);
process(current->value);
inOrder(current->right);
}
}
// postOrder processing of tree rooted at current
template <class T>
void Tree<T>::postOrder(Node * current)
{ // visit left child, right child, node
if (current)
{
postOrder(current->left);
postOrder(current->right);
process(current->value);
}
}
#include "SearchTree.h"
usingnamespace std;
template <class T>
void SearchTree<T>::add(T val)
{
// add value to binary search tree
if (!root)
{
root = new Node(val);
return;
}
add(root, val);
}
template <class T>
bool SearchTree<T>::
search(Node * current, T val)
{
// see if argument value occurs in tree
if (!current)
returnfalse; // not found
if (current->value == val)
returntrue;
if (current->value < val)
return search(current->right, val);
elsereturn search(current->left, val);
}
template <class T>
void SearchTree<T>::
add(Node* current, T val)
{
if (current->value < = val)
// add to right subtree
if (!current->right)
{
current->right = new Node(val);
return;
}
else add(current->right, val);
else
// add to left subtree
if (!current->left)
{
current->left = new Node(val);
return;
}
else add(current->left, val);
}
template <class T>
void SearchTree<T>::remove(T val)
{
}