/***********************************************************************/ /* file bst.cc */ /* contains the implementation of class members of class */ /* bst. */ /***********************************************************************/ #include "bst.h" /***********************************************************************/ /* implementation of class bst */ /***********************************************************************/ /***********************************************************************/ /* public member operator= */ /* copies the whole bst passed as argument */ /***********************************************************************/ template <class type> const bst<type>& bst<type>::operator=(const bst<type>& tree) { this->sz= tree.size(); if (this->head != NULL) { delete this->head; } if (tree.head) { this->head= new bst_item<type>(*tree.head); } else { this->head= NULL; } return *this; } /***********************************************************************/ /* public member function add */ /* takes one argument of type and inserts an item to the bst, */ /* containing the passed argument as data. It returns a pointer to the */ /* added bst_item. */ /***********************************************************************/ template <class type> bst_item<type> *bst<type>::add(const type& dat) { bst_item<type> *it= NULL; if (this->head != NULL) { bst_item<type> *parent= parent_search(dat); if (parent) { it= child(parent, dat); if (!it) { it= new bst_item<type>(dat); add_item(parent, it); } } } else { it= new bst_item<type>(dat); add_item(this->head, it); } return it; } /***********************************************************************/ /* public member function search */ /* takes an argument of type and searches for a bst_item in the bst */ /* containing it as data. The type type must supply the <>== operators.*/ /* Return value is a pointer to the node containing the argument */ /* if found, NULL otherwise. */ /***********************************************************************/ template <class type> bst_item<type> *bst<type>::search(const type& dat) { if (this->head->data == dat) { return this->head; } bst_item<type> *it= NULL; bst_item<type> *parent= parent_search(dat); if (parent) { it= child(parent, dat); } return it; }