AVL树(三)
下面用一个例子来测试AVL树的平衡性
随机的反复插入和删除树中的节点,如代码所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | #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树的平衡性很好,几乎达到完全二叉树的效果
本文出自:http://www.cnblogs.com/xiao-cheng/archive/2011/10/04/2199092.html