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