#include <iostream>
using namespace std;
template <class KEY,class OTHER>
struct SET{
KEY key;
OTHER other;
};
template <class KEY,class OTHER>
class dynamicSearchTable{
public://纯虚函数
virtual SET<KEY,OTHER>*find(const KEY&x)const=0;//返回一个指向数据元素的指针,没找到返回空指针。
virtual void insert(const SET<KEY, OTHER>&x)=0;//引用传递,节省空间
virtual void remove(const KEY&X)=0;
virtual ~dynamicSearchTable(){
};
};
//AVL树的定义
template <class KEY,class OTHER>
class AvlTree:public dynamicSearchTable<KEY, OTHER>
{
struct AvlNode{
SET<KEY, OTHER>data;
AvlNode*left;
AvlNode*right;
int height;//结点的高度
AvlNode(const SET<KEY,OTHER>&element,AvlNode*lt,AvlNode*rt,int h=1):data(element),left(lt),right(rt),height(h){
}
};
AvlNode *root;
public:
//这五个函数和动态查找表一样的
AvlTree(){
root=NULL;
}
~AvlTree(){
makeEmpty(root);
}
SET<KEY,OTHER>*find(const KEY&x)const{
//返回一个指针
return find(x, root);
}
void insert(const SET<KEY, OTHER>&x){
insert(x, root);
}
void remove(const KEY&x){
remove(x, root);
}
//新增函数
int height(AvlNode *&t){
//不是直接返回t?
return (t==NULL)?0:t->heig
AVL树实现:
最新推荐文章于 2021-12-29 21:25:51 发布