您的位置:首页 > 编程语言 > C语言/C++

递归实现二叉查找树 C++

2013-04-14 17:13 330 查看
把这些都写到博客中不是为了其他的目的,只是为了以后找工作的时候能提前看看复习一下,脑子里好有一些印象。

#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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: