<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->
#include<stdlib.h>

template<typenameT>
classCAVLTree;

template<typenameT>
classCAVLTreeNode


{
public:
CAVLTreeNode(constT&item,CAVLTreeNode<T>*lptr=NULL,CAVLTreeNode<T>*rptr=NULL,intbalfac=0):data(item),left(lptr),right(rptr),balanceFactor(balfac)


{
}
CAVLTreeNode<T>*Left(void)const


{
returnleft;
}
CAVLTreeNode<T>*Right(void)const


{
returnright;
}
intGetBalanceFactor()const


{
returnthis->balanceFactor;
}
friendclassCAVLTree<T>;
public:
Tdata;//数据
private:
CAVLTreeNode<T>*left;//左子树
CAVLTreeNode<T>*right;//右子树
intbalanceFactor;//平衡因子
CAVLTreeNode<T>*&Left(void)


{
returnleft;
}
CAVLTreeNode<T>*&Right(void)


{
returnright;
}

};

constintLEFTHEAVY=-1;
constintBALANCE=0;
constintRIGHTHEAVY=1;

template<typenameT>
classCAVLTree


{
public:
CAVLTree(void);
CAVLTree(constCAVLTree<T>&tree);
CAVLTree&operator=(constCAVLTree&rhs);
voidInsert(constT&item);
voidClearTree();//清空树
boolContains(constT&item);//是否包含数据
CAVLTreeNode<T>*FindNode(constT&item,CAVLTreeNode<T>*&parent)const;//寻找节点
CAVLTreeNode<T>*FindMin()const;//找最小值
CAVLTreeNode<T>*FindMax()const;//找最大值
voidPrintTree();//前序遍历树(非递归)
virtual~CAVLTree(void);

protected:
CAVLTreeNode<T>*GetAVLTreeNode(constT&item,CAVLTreeNode<T>*lptr=NULL,CAVLTreeNode<T>*rptr=NULL);
CAVLTreeNode<T>*CopyTree(CAVLTreeNode<T>*t);//拷贝树
voidFreeTreeNode(CAVLTreeNode<T>*p);//释放树节点
voidDeleteTree(CAVLTreeNode<T>*t);//删除树

//旋转
voidSingleRotateLeft(CAVLTreeNode<T>*&p);
voidSingleRotateRight(CAVLTreeNode<T>*&p);
voidDoubleRotateLeft(CAVLTreeNode<T>*&p);
voidDoubleRotateRight(CAVLTreeNode<T>*&p);

voidUpdateLeftTree(CAVLTreeNode<T>*&tree,int&reviseBalanceFactor);
voidUpdateRightTree(CAVLTreeNode<T>*&tree,int&reviseBalanceFactor);
voidAVLInsert(CAVLTreeNode<T>*&tree,CAVLTreeNode<T>*newnode,int&reviseBalanceFactor);

private:
CAVLTreeNode<T>*root;//平衡二叉树树根
intsize;//树节点个数
};






































































































<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->






















































































































































































































































































































































































































































测试代码
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->
#include"BinSTree.cpp"
#include<iostream>
usingnamespacestd;

CAVLTree<int>*MakeSampleTree()


{//示例AVL树
CAVLTree<int>*tree1=newCAVLTree<int>();
inta=5;
tree1->Insert(a);
tree1->Insert(30);
tree1->Insert(65);
tree1->Insert(25);
tree1->Insert(35);
tree1->Insert(50);
tree1->Insert(10);
tree1->Insert(28);
tree1->Insert(26);
tree1->Insert(33);
returntree1;
}

intmain(intargc,char*argv[])


{
CAVLTree<int>*tree1=MakeSampleTree();
tree1->PrintTree();

cout<<tree1->Contains(40)<<endl;
CAVLTreeNode<int>*p=tree1->FindMin();
cout<<p->data<<endl;
system("pause");
return0;
}








































