HERE IS DELETE in the class def, make one change after: void printTree(); put: void deleteInfo(char *searchArg); Put this stuff somewhere before main(): //recursively go through the tree and readd everything except ContactInfo *x =//for the node we want to remove.. quick and ditry delete void addInfo(TreeNode *x, BinSearchTree *n, char * searchArg) { if(NULL != x) { addInfo(x->getLeftChild(),n,searchArg); if(0 != strcmp(x->getSearchKey(),searchArg)) n->insertNode(x->getSearchKey(),x->getInfo()); addInfo(x->getRightChild(),n,searchArg); delete x; } } void BinSearchTree::deleteInfo(char *searchArg) { BinSearchTree *newTree; newTree = new BinSearchTree; addInfo(root_ptr,newTree,searchArg); root_ptr = newTree->root_ptr; } //to delete josh from the names list names.deleteInfo("Josh"); //you will have to delete from both lists... so just call findInfo names.deleteInfo("Josh"); ContactInfo *x = names.findInfo("Josh"); numbers.deleteInfo(x->getNumber()); //visa versa for the other way...