/***********************************************************************/
/* file bst_item.cc */
/* contains the implementation of class members of class */
/* bst_item. */
/***********************************************************************/
#include "bst_item.h"
/***********************************************************************/
/* implementation of class bst_item */
/***********************************************************************/
/***********************************************************************/
/* constructor */
/***********************************************************************/
template <class type>
bst_item<type>::bst_item(const type& dat):container_item<type>(dat)
{
left= NULL;
right= NULL;
}
/***********************************************************************/
/* copy constructor */
/* creates also copies of the children recursively */
/***********************************************************************/
template <class type>
bst_item<type>::bst_item(const bst_item<type>& it):
container_item<type>(it.data)
{
if (it.left)
{
left= new bst_item<type>(*it.left);
}
else
{
left= NULL;
}
if (it.right)
{
right= new bst_item<type>(*it.right);
}
else
{
right= NULL;
}
}
/***********************************************************************/
/* public member operator= */
/* copies the arguments data into the bst_item and generates children */
/* identical to those of the argument. The process repeats recursively.*/
/* Prior children (subtrees) of bst_item are deleted recursively. */
/***********************************************************************/
template <class type>
const bst_item<type>& bst_item<type>::operator=
(const bst_item<type>& it)
{
this->data= it.data;
if (left)
{
delete left;
}
if (it.left)
{
left= new bst_item<type>(*it.left);
}
else
{
left= NULL;
}
if (right)
{
delete right;
}
if (it.right)
{
right= new bst_item<type>(*it.right);
}
else
{
right= NULL;
}
return *this;
}
/***********************************************************************/
/* destructor */
/* destroys all children recursively. */
/***********************************************************************/
template <class type>
bst_item<type>::~bst_item()
{
if (left)
{
delete left;
}
if (right)
{
delete right;
}
}