把这些都写到博客中不是为了其他的目的,只是为了以后找工作的时候能提前看看复习一下,脑子里好有一些印象。
#include <iostream>
using namespace std;
template<class T>
class TreeNode
{
public:
TreeNode():lson(NULL),rson(NULL),freq(1)
{}
T data;
unsigned int freq;
TreeNode *lson;
TreeNode *rson;
};
template<class T>
class BST
{
private:
TreeNode<T> *root;
void insertpri(TreeNode<T> *&node,T x);
TreeNode<T>* findpri(TreeNode<T>* node,T x);
void insubtree(TreeNode<T>* node);
void Deletepri(TreeNode<T>* &node,T x);
public:
BST():root(NULL){}
void insert(T x);
TreeNode<T>*find(T x);
void Delete(T x);
void traversal();
};
template<class T>
void BST<T>::insertpri(TreeNode<T> *&node,T x)
{
if(node==NULL)
{
node=new TreeNode<T>();
node->data=x;
return;
}
if (node->data>x)
{
insertpri(node->lson,x);
}
else if(node->data<x)
{
insertpri(node->rson,x);
}
else
++(node->freq);
}
template<class T>
void BST<T>::insert(T x)
{
insertpri(root,x);
};
template<class T>
TreeNode<T> *BST<T>::findpri(TreeNode<T>* node,T x)
{
if(node==NULL)
{
return NULL;
}
if(node->data>x)
{
return findpri(node->lson,x);
}
else if(node->data<x)
{
return findpri(node->rson,x);
}
else return node;
}
template<class T>
TreeNode<T>* BST<T>::find(T x)
{
return findpri(root,x);
};
template<class T>
void BST<T>::Deletepri(TreeNode<T>* &node,T x)
{
if (node==NULL)
return;
if(x<node->data)
Deletepri(node->lson,x);
else if(x>node->data)
Deletepri(node->rson,x);
else
{
if(node->lson&&node->rson)
{
TreeNode<T>* temp=node->rson;
while(temp->lson!=NULL)
temp=temp->lson;
node->data=temp->data;
node->freq=temp->freq;
Deletepri(node->rson,temp->data);
}
else
{
TreeNode<T>* temp=node;
if(node->lson==NULL)
node=node->rson;
else if(node->rson==NULL)
node=node->lson;
delete(temp);
}
}
return;
};
template<class T>
void BST<T>::Delete(T x)
{
Deletepri(root,x);
};
template<class T>
void BST<T>::insubtree(TreeNode<T>* node)
{
if (node==NULL)
return;
insubtree(node->lson);
cout<<node->data<<" ";
insubtree(node->rson);
}
template<class T>
void BST<T>::traversal()
{
insubtree(root);
}
int main()
{
BST<int> m_bTree;
m_bTree.insert(15);
m_bTree.insert(5);
m_bTree.insert(3);
m_bTree.insert(12);
m_bTree.insert(13);
m_bTree.insert(10);
m_bTree.insert(6);
m_bTree.insert(7);
m_bTree.insert(16);
m_bTree.insert(20);
m_bTree.insert(18);
m_bTree.insert(23);
m_bTree.Delete(5);
m_bTree.traversal();
system("pause");
return 0;
}