12 Avl PDF
12 Avl PDF
AVL Tree
Fasilkom UI
X X
H
H-2
H-1
10 10
5 20 5 20
3 3 43
1
2
1 3
12
8 16
4 10 14
2 6
12
8 16
4 10 14
2 6
HP=HQ=HR k2 k1
k1 k2
R P
P Q Q R
HA=HB+1
HB=HC
k2 k1
k1 k2
C
B A B C
A
HA=HB
HC=HB+1
k2 k1
k1 k2
A
A B C B
C
k2 k1
k1 k2
R P
P R
Q Q
HQ=HP+1
HP=HR
SUR – HMM – AA Fasilkom UI - IKI20100/ IKI80110P Semester Ganjil – 2009/2010 13
Double Rotation: Langkah
k3 k3
k1 k2
k2 k1
D D
A C
B C A B
HA=HB=HC=HD
SUR – HMM – AA Fasilkom UI - IKI20100/ IKI80110P Semester Ganjil – 2009/2010 14
Double Rotation: Langkah
k2
k1 k3
A B C D
k3 k2
k1 k1 k3
k2
D A B C D
A
B C
HA=HB=HC=HD
k2 k1
k1 k3 k3
k2
A B C D A
D
B C
HA=HB=HC=HD
11 11
8 20 4 20
4 16 27 3 8 16 27
3
11 11
8 20 5 20
4 16 27 4 8 16 27
5
Deletion:
Kasus 1: jika X adalah leaf, delete X
Kasus 2: jika X punya 1 child, X digantikan oleh child tsb.
Kasus 3: jika X punya 2 child, ganti X secara rekursif dengan
predecessor-nya secara inorder
Rebalancing
60
20 70
10 40 65 85
5 15 30 50 80 90
55
60
20 70
10 40 65 85
5 15 30 50 80 90
55
60
20 70
10 40 65 85
5 15 30 50 80 90
55
60
20 70
10 40 65 85
50 80 90
5 15 30
55
60
20 70
10 40 65 85
5 15 30 50 prev 80 90
55
55
20 70
10 40 65 85
5 15 30 50 80 90
55
20 prev 70
10 40 65 85
5 15 30 50 80 90
50
20 70
10 40 65 85
5 15 30 80 90
50
20 prev 70
10 40 65 85
5 15 30 80 90
40
20 70
10 30 65 85
5 15 80 90
40
20 prev 70
10 30 65 85
5 15 80 90
30
20 70
10 Kasus ? 65 85
5 15 80 90
30
10 70
5 20 65 85
15 80 90
30
10 70
5 20 65 85
15 80 90
30
10 70
20 65 85
15 80 90
30
15 70
10 20 65 85
80 90
30
15 70
10 20 65 85
80 90
30
20 70
65 85
80 90
70
30 85
20 80 90
65
50
30 70
20 60 80
40
10 90
15 45
50
30 80
20 70 90
40
10 15 45
30
20 50
10 15 40 80
5 45 70 90
H
H-2
H-1 SH-2
SH-1
Fi φi / 5
φ = ( 1+ 5 ) / 2 1.618
if( t == null )
t = new AvlNode<A>( x, null, null );
else if( x.compareTo( t.element ) < 0 )
{
t.left = insert( x, t.left );
if(Math.abs(height( t.left ) - height( t.right )) == 2 )
if( x.compareTo( t.left.element ) < 0 )
t = rotateWithLeftChild( t );
else
t = doubleWithLeftChild( t );
}
else if( x.compareTo( t.element ) > 0 )
{
// simetris dengan program diatas
}
return t;
}
if( t == null )
t = new AvlNode<A>( x, null, null );
else if( x.compareTo( t.element ) < 0 )
{
t.left = insert( x, t.left );
if(Math.abs(height( t.left ) - height( t.right )) == 2 )
if( x.compareTo( t.left.element ) < 0 )
t = rotateWithLeftChild( t );
else
t = doubleWithLeftChild( t );
}
else if( x.compareTo( t.element ) > 0 )
{
// simetris dengan program diatas
}
return t;
}