BinarySearchTree
**Insert 插入
template<class T>
void InsertNode(BinaryTreeNode<T> *root , BinaryTreeNode<T> *newpointer) {
BinaryTreeNode<T> *pointer = NULL;
if (root == NULL) {
Initialize(newpointer);
return;
}
else pointer = root;
while (pointer != NULL) {
if (newpointer->value() == pointer->value())
return ;
else if (newpointer->value() < pointer->value()) {
if (pointer->leftchild() == NULL) {
pointer->left = newpointer;
return;
}
else pointer = pointer->leftchild();
}
else {
if (pointer->rightchild() == NULL){
pointer->right = newpointer;
return;
}
else pointer = pointer->rightchild();
}
}
}
Find 查找
template <class T>
BinarySearchTreeNode<T>* search(BinarySearchTreeNode<T>* root,T key){
BinarySearchTreeNode<T>* current=root;
while((NULL!=root)&&(key!=current->getValue()))
{
current=(key<current->getValue() ? search(current->leftChild,key) : search(current->rightChild,key));
}
return current;
}
Delete 删除
template <class T>
void deleteByMerging(BinarySearchTreeNode<T>* node){
BinarySearchTreeNode<T> *tmp=node;
if(node!=NULL){
if(!node->rightChild)
node=node->leftChild;
else if(node->leftChild==NULL)
node=node->rightChild;
else{
tmp=node->leftChild;
while(tmp->rightChild!=NULL)
tmp=tmp->rightChild;
tmp->rightChild=node->rightChild;
tmp=node;
node=node->leftChild;
}
delete tmp;
}
}
template <class T>
void deleteByCopying(BinarySearchTreeNode<T>* node){
BinarySearchTreeNode<T>* previous,*tmp=node;
if(node->rightChild==NULL)
node=node->leftChild;
else if(node->leftChild==NULL)
node=node->rightChild;
else{
tmp=node->leftChild;
previous=node;
while(tmp->rightChild!=NULL)
{
previous=tmp;
tmp=tmp->rightChild;
}
node->value=tmp->value;
if(previous==node)
previous->leftChild=tmp->leftChild;
else
previous->rightChild=tmp->leftChild;
}
delete tmp;
}6