#include "BinarySearchTree.h" template void BinarySearchTree::insert(const T& newEntry) { BinaryTreeNode* newNodePtr = new BinaryTreeNode(newEntry); this->rootPtr = _insert(this->rootPtr, newNodePtr); this->count++; } template BinaryTreeNode* BinarySearchTree::_insert(BinaryTreeNode* nodePtr, BinaryTreeNode* newNodePtr) { BinaryTreeNode* pWalk = nodePtr, * parent = nullptr; if (!nodePtr) { nodePtr = newNodePtr; return nodePtr; } else { while (pWalk) { parent = pWalk; if (pWalk->getItem() > newNodePtr->getItem()) pWalk = pWalk->getLeftPtr(); else pWalk = pWalk->getRightPtr(); } if (parent->getItem() > newNodePtr->getItem()) parent->setLeftPtr(newNodePtr); else parent->setRightPtr(newNodePtr); } return nodePtr; } template bool BinarySearchTree::search(const T& target, T& returnedItem) const { BinarySearchTree* temp = nullptr; temp = _search(this->rootPtr, target); if (temp) { returnedItem = temp->getItem(); return true; } return false; } template BinaryTreeNode* BinarySearchTree::_search(BinaryTreeNode* nodePtr, const T& target) const { BinaryTreeNode* found = nullptr; if (nodePtr) { if (target.getCode() == nodePtr->getItem().getCode()) found = nodePtr; else if (target.getCode() < nodePtr->getItem().getCode()) found = _search(nodePtr->getLeftPtr(), target); else found = _search(nodePtr->getRightPtr(), target); } return found; }