Professional Documents
Culture Documents
ADS 10 Handout
ADS 10 Handout
CS-CO-412
David Vernon
Professor of Informatics
University of Skövde
Sweden
david@vernon.eu
www.vernon.eu
Trees
Lecture 10
• Types of trees
• Binary Tree ADT
• Binary Search Tree
• Optimal Code Trees
• Huffman’s Algorithm
• Height Balanced Trees
– AVL Trees
– Red-Black Trees
Height-Balanced Trees
AVL Trees
AVL Trees
JULY
FEB MAY
AVL Trees
APR
AUG
DEC
FEB
JAN
JULY
JUN
MAR
MAY
NOV
A
Degenerate
Tree
for
the
Months
of
the
Year
OCT
SEPT
Algorithms and Data Structures 8 Copyright © D. Vernon 2014
AVL Trees
AVL Trees
• Height-Balanced
T is height-balanced iff
AVL Trees
0 if T is empty and
• Height Numbering
– Number all external nodes 0
– Number each internal node to be one more than the maximum
of the numbers of its children
– Then the number of the root is the height of T
JAN
FEB MAR
JUN MAY
APR
DEC OCT
NOV
AVL Trees
JAN
FEB MAR
JUN MAY
APR
DEC OCT
NOV
JULY
FEB MAY
AVL Trees
JULY
FEB MAY
• Order of insertions:
AVL Trees
height(T1) - height(T2)
MARCH MAR
MAY MAR
MAY
NOVEMBER MAR
MAY
NOV
NOVEMBER MAR
MAY
NOV
NOV
RR rebalancing
MAY
AUGUST
MAR NOV
AUG
MAY
AUGUST
MAR NOV NO REBALANCING NEEDED
AUG
MAY
AUGUST
MAR NOV NO REBALANCING NEEDED
AUG
MAY
APRIL
MAR NOV
AUG
APR
MAY
AUGUST
MAR NOV NO REBALANCING NEEDED
AUG
MAY
APRIL
MAR NOV
AUG
APR
MAY
AUGUST
MAR NOV NO REBALANCING NEEDED
AUG
MAY MAY
APRIL
MAR NOV AUG NOV
APR
LL rebalancing
MAY
JANUARY
AUG NOV
APR MAR
JAN
MAY
JANUARY
AUG NOV
APR MAR
JAN
MAY MAR
JANUARY
AUG NOV AUG MAY
APR MAR APR JAN NOV
JAN
LR rebalancing
MAR
DECEMBER
AUG MAY
DEC
MAR
DECEMBER
AUG MAY
NO REBALANCING NEEDED
APR JAN NOV
DEC
MAR
JULY
AUG MAY
DEC JUL
MAR
JULY
AUG MAY
NO REBALANCING NEEDED
APR JAN NOV
DEC JUL
FEBRUARY
MAR
AUG MAY
DEC JUL
FEB
FEBRUARY
MAR
AUG MAY
DEC JUL
FEB
FEBRUARY
MAR MAR
FEB
RL rebalancing
JUNE
MAR
DEC MAY
JUN
JUNE
MAR
DEC MAY
JUN
JUNE
MAR JAN
JUN
LR rebalancing
OCTOBER JAN
DEC MAR
OCT
OCTOBER JAN
DEC MAR
OCT
DEC MAR
OCT
JAN
DEC MAR
SEPTEMBER
JAN
DEC MAR
SEPT
JAN
DEC MAR
SEPT
– RR
– LL (symmetric with RR)
– RL
– LR (symmetric with RL)
AVL Trees
AVL Trees
+1
A
0
AR
B
BL BR
AVL Trees
+2
A
+1
AR
B
BL BR
+2
0
A
B
+1
AR
0
BL
B
A
BL BR BR AR
AVL Trees
Balanced
Subtree
-‐1
A
AL
0
B
BL BR
-‐2
A
-‐1
AL
B
BL BR
-‐2
0
A
B
-‐1
0
AL
BR
B
A
BL BR AL BL
+1
A
0
B
AVL Trees
+2
A
-‐1
B
0
C
+2
0
A
C
-‐1
0
0
B
B
A
0
C
AVL Trees
Balanced
Subtree
+1
A
0
AR
B
0
BL
C
CL CR
+2
A
-‐1
AR
B
+1
BL
C
CL CR
+2
0
A
C
-‐1
0
0
AR
B
A
B
+1
BL
BL
CL
CR
AR
C
CL CR
+1
A
0
AR
B
0
BL
C
CL CR
AVL Trees
Unbalanced
following
inserCon
+2
A
-‐1
AR
B
-‐1
BL
C
CL CR
+2
0
A
C
-‐1
+1
0
AR
B
A
B
-‐1
BL
BL
CL
CR
AR
C
CL CR
AVL Trees
Balanced
Subtree
-‐1
A
0
AL
B
0
BR
C
CL CR
-‐2
A
+1
AL
B
-‐1
BR
C
CR CL
-‐2
0
A
C
+1
+1
0
AL
A
B
B
-‐1
BL
AL
CL
CR
BL
C
CL CR
AVL Trees
ELSE
v:= A; Child(1, v, T)
B:= v;
d := -1
ENDIF
WHILE ((NOT IsEqual(w, v))) DO
IF (e.data < Examine_Data(v, T) )
THEN
ReplaceBF(+1, v, T);
Child(0, v, T) (* height of Left ^ *)
ELSE
ReplaceBF(-1, v, T);
Child(1, v, T) (* height of Right ^ *)
ENDIF
ENDWHILE
IF (ExamineBF(A, T) = 0 )
THEN
ReplaceBF(d, A, T) (* still balanced *)
ELSE
IF ((ExamineBF(A, T) + d) = 0)
THEN
ReplaceBF(0, A, T)(*still balanced*)
ELSE
(* Tree is unbalanced *)
(* determine rotation type *)
(* Tree is unbalanced *)
(* determine rotation type *)
IF d = +1
THEN (* left imbalance *)
IF ExamineBF(B) = +1
THEN (* LL Rotation *)
(* replace left subtree of A *)
(* with right subtree of B *)
temp := B; Child(1, temp, T);
ReplaceChild(0, A, T, temp);
ReplaceBF(0, A, T);
ReplaceBF(0, B, T);
ELSE (* LR Rotation *)
C := B; Child(1, C, T);
C_L := C; Child(0, C_L, T);
C_R := C; Child(1, C_R, T);
ReplaceChild(1, B, T, C_L);
ReplaceChild(0, A, T, C_R);
ReplaceChild(0, C, T, B);
ReplaceChild(1, C, T, A);
IF ExamineBF(C) = +1 (* LR(b) *)
THEN
ReplaceBF(-1, A, T);
ReplaceBF(0, B, T);
ELSE
IF ExamineBF(C) = -1 (* LR(c) *)
THEN
ReplaceBF(+1, B, T);
ReplaceBF(0, A, T);
ELSE (* LR(a) *)
ReplaceBF(0, A, T);
ReplaceBF(0, B, T);
ENDIF
ENDIF
(* B is new root *)
ReplaceBF(0, C, T);
B := C
ENDIF (* LR rotation *)
ELSE (* right imbalance *)
ENDIF (* d = +1 *)
ReplaceTree(A, T, B)
(* Replace subtree A with B in T *)
(* Note: this is a trivial operation *)
(* since we are using a complex *)
(* window variable *)
ENDIF
ENDIF
ENDIF
END (* AVL_Insert() *)
Red-Black Trees
Red-Black Trees
– Red condition: Each red node that is not the root has a black
parent
Red-Black Trees
Undetermined colour
Red-Black Trees
Red-Black Trees
Red-Black Trees
– Single promotion
– 2 promotion
• Single promotion
• Also referred to as
Red-Black Trees
Promote
v
(LeQ
RotaCon)
Promote
u
(Right
RotaCon)
Red-Black Trees
Promote
v
(LeQ
RotaCon)
Promote
u
(Right
RotaCon)
keys(1)
<
key(v)
<
key(u)
keys(1)
<
key(v)
key(v)
<
keys(2)
<
key(u)
key(v)
<
keys(2)
<
key(u)
key(u)
<
keys(3)
key(v)
<
key(u)
<
keys(3)
Algorithms and Data Structures 102 Copyright © D. Vernon 2014
Red-Black Trees
• 2-Promotion
• Zig-zag promotion
Red-Black Trees
Red-Black Trees
Red-Black Trees
• Insertions
– first searching the tree until an external node is reached (if the
key is not already in the tree)
– then inserting the new (internal) node
Red-Black Trees
• Recolouring:
Red-Black Trees
Red-Black Trees
Red-Black Trees
Red-Black Trees
• Case 3:
Red-Black Trees
Red-Black Trees
Red-Black Trees
Red-Black Trees
Red-Black Trees
Red-Black Trees
Red-Black Trees