下面用一个例子来测试AVL树的平衡性
随机的反复插入和删除树中的节点,如代码所示:
#include <iostream> #include "AVL.h" #include "IntClass.h" #include <time.h> #include <stdlib.h> #include "StringClass.h" using namespace std; int main() { BSTree bstree; BSTree bstreeStr; int max=50; srand(unsigned(time(0))); for(int j=0;j<50;j++) { int number=rand()%7; for(int i=number;i>0;i--) { int a=rand()%max; bstree.insert(new IntClass(a),new StringClass("Tao",3)); } for(int i=number;i>0;i--) { int a=rand()%max; bstree.remove(new IntClass(a)); } } bstree.outPut(); cout<<"------------------------------------------------"<<endl; bstreeStr.insert(new StringClass("Jim",3),new StringClass("Hello, I'm a student",20)); bstreeStr.insert(new StringClass("Lucy",4),new StringClass("Hello, I'm a teacher",20)); bstreeStr.insert(new StringClass("Brown",5),new StringClass("Hello, I'm a doctor",19)); bstreeStr.insert(new StringClass("Lily",4),new StringClass("Hello, I'm a actor",18)); bstreeStr.insert(new StringClass("Tao",3),new StringClass("Hello, I'm a student",20)); bstreeStr.insert(new StringClass("Peter",5),new StringClass("Hello, I'm a teacher",20)); bstreeStr.insert(new StringClass("John",4),new StringClass("Hello, I'm a doctor",19)); bstreeStr.insert(new StringClass("Tony",4),new StringClass("Hello, I'm a actor",18)); bstreeStr.insert(new StringClass("Linda",5),new StringClass("Hello, I'm a student",20)); bstreeStr.insert(new StringClass("Jurcy",5),new StringClass("Hello, I'm a teacher",20)); bstreeStr.insert(new StringClass("Chern",5),new StringClass("Hello, I'm a doctor",19)); bstreeStr.outPut(); cout<<"-------------------------------------------------"<<endl; return 0; }
结果如下图,可见AVL树的平衡性很好,几乎达到完全二叉树的效果