
1.
G
tìm
k
hạn
nhiê
n
khô
n
nên
nha
n
bằn
g
cây
2
hiệu
tron
g
tạo
r
G
IỚI THI
Ệ
Cây tì
m
k
iếm nhan
h
Tuy nhi
ê
chế. Nó h
n
. Tuy nh
i
n
g hiệu qu
ả
không câ
n
n
h (hoặc c
h
Chúng
t
g
: đó là câ
y
Có nhiề
u
2
-3-4. Tu
y
quả nhất,
g
những t
ậ
Trước k
r
a như thế
n
H
Ệ
U
m
kiếm nhị
h
.
ê
n trong
m
o
ạt động
t
i
ên, nếu d
ữ
ả
. Khi các
n
bằng. Kh
h
èn hoặc
x
t
a khảo s
á
y
đỏ đen, l
à
u
cách tiế
p
y
vậy, tro
n
ít ra thì k
h
ậ
p tin.
h
i khảo s
á
n
ào.
H
ình 1. C
á
BÀI 6:
C
phân là
m
m
ột số trư
ờ
t
ốt nếu dữ
ữ
liệu đượ
c
trị số cần
i cây khô
n
x
óa) một p
h
á
t một cá
c
à
cây tìm
k
p
cận khác
n
g phần lớ
n
h
i dữ liệu
đ
á
t cây đỏ đ
á
c node đư
C
ÂY ĐỎ
m
ột cấu tr
ú
ờ
ng hợp c
â
liệu được
c
chèn và
o
chèn đã đ
u
n
g cân bằn
h
ần tử đã
c
c
h giải qu
y
k
iếm nhị p
h
để bảo đ
ả
n
t
r
ường
h
đ
ược lưu t
r
en, hãy x
e
ợc chèn t
h
ĐEN
ú
c lưu trữ
d
â
y tìm kiế
m
chèn vào
o
theo thứ
t
u
ợc sắp x
ế
g, nó mất
c
ho.
y
ết vấn đ
ề
h
ân có thê
m
ả
m cho câ
y
h
ợp, cây đ
ỏ
r
ữ trong b
ộ
e
m lại cây
k
h
eo thứ tự
t
d
ữ liệu tố
t
m
nhị phâ
n
cây theo
t
t
ự đã đuợ
c
ế
p thì cây
n
đi khả nă
n
ề
của cây
m
một vài
y
cân bằng
ỏ
đen là c
â
ộ
nhớ chứ
k
hông câ
n
t
ăng dần
t
với tốc
đ
n
có một s
t
hứ tự ng
ẫ
c
sắp xếp
s
n
hị phân t
r
n
g tìm kiế
m
không c
â
đặc điểm
: chẳng h
ạ
â
y cân bằ
n
không ph
ả
n
bằng đư
ợ
1
đ
ộ
ố
ẫ
u
s
ẽ
r
ở
m
â
n
.
ạ
n
n
g
ả
i
ợ
c

vì
m
của
n
Độ
p
một
về
O
đảm
ngh
ĩ
con
b
2.
Đ
Cây
(hìn
h
Khi
quy
Những
n
m
ỗi node l
ớ
n
út t
r
ước
đ
p
hức tạ
p
Khi cây
chiều tha
y
O
(N), thay
v
Để bảo
đ
cây luôn
ĩ
a là mỗi n
o
b
ên trái.
Đ
Ị
NH NG
H
đỏ đen là
h
2)
(1) Mọi
(2) Nod
e
(3) Nếu
(4) Mọi
chèn (hay
tắc đỏ đe
n
n
ode này t
ự
ớ
n hơn no
d
đ
ó. Khi ấy
,
p
:
một nhán
h
y
vì hai ch
i
v
ì O(log
2
N
đ
ảm thời
g
luôn cân
b
o
de t
r
ên c
â
H
ĨA CÂY
Đ
một cây
n
node phải
e
gốc và c
á
một node
đường dẫ
n
xóa) một
n
. Nếu đượ
c
ự
sắp xếp
d
e đã đượ
c
,
cây bị m
ấ
h
, sẽ trở t
h
i
ều. Tron
g
N
) đối với
c
g
ian truy
x
b
ằng (ít r
a
â
y phải có
Đ
Ỏ ĐEN
n
hị phân t
ì
là đỏ hoặ
c
á
c node lá
là đỏ, nhữ
n
n
từ gốc đ
ế
node mới,
c
tuân thủ,
thành mộ
t
c
chèn vào
ấ
t cân bằn
g
h
ành một
d
g
t
r
ường h
ợ
c
ây cân bằ
n
x
uất nhanh
a
cũng là
c
xấp xỉ số
n
ì
m kiếm (
B
c
đen.
(NIL) phả
n
g node c
o
ế
n một lá
p
cần phải
t
cây sẽ đư
t
đường k
h
trước đó,
g
hoàn toà
n
d
anh sách
ợ
p này, th
ờ
n
g.
của cây,
c
c
ây gần câ
n
n
ode con
b
B
ST) tuâ
n
i luôn luô
n
o
n của nó
p
p
hải có cù
n
t
uân thủ c
á
ợc cân bằ
n
h
ông phân
mỗi node
n
.
liên kết,
d
ờ
i gian tru
y
c
húng ta c
ầ
n
bằng).
Đ
b
ên phải b
ằ
n
thủ các
q
n
đen.
p
hải đen.
n
g số lượn
g
á
c quy tắc
n
g.
nhánh. B
ở
là con ph
ả
d
ữ liệu sẽ
l
y
xuất giả
m
ầ
n phải b
ả
Đ
iều này c
ằ
ng số no
d
q
uy tắc sa
u
g
node đe
n
t
r
ên -gọi
l
2
ở
i
ả
i
l
à
m
ả
o
ó
d
e
u
:
n
.
l
à

3
Hình 2. Một ví dụ về cây đỏ đen
Số lượng node đen trên một đường dẫn từ gốc đến lá được gọi là chiều
cao đen (black height). Ta có thể phát biểu quy tắc (4) theo một cách khác là
mọi đường dẫn từ gốc đến lá phải có cùng chiều cao đen.
Khai báo cấu trúc:
typedef int Data; /* Kiểu dữ liệu khoá */
typedef enum { BLACK, RED } nodeColor;
typedef struct NodeTag {
nodeColor color; /* Màu node (BLACK, RED) */
Data info; /* Khoá sử dụng tìm kiếm */
struct NodeTag *left; /* Con trái */
struct NodeTag *right; /* Con phải */
struct NodeTag *parent; /* Cha */
} NodeType;
typedef NodeType *iterator;
Bổ đề:
Một cây đỏ đen n-node có chiều cao h <= 2 log2(n+1)
3. PHÉP QUAY
Thực ra quay không có nghĩa là các node bị quay mà để chỉ sự thay
đổi quan hệ giữa chúng. Một node được chọn làm "đỉnh" của phép quay.
Nếu chúng ta đang thực hiện một phép quay qua phải, node "đỉnh" này sẽ di
chuyển xuống dưới và về bên phải, vào vị trí của node con bên phải của nó.
Node con bên trái sẽ đi lên để chiếm lấy vị trí của nó.

trái.
qua
y
4.
T
địn
h
nod
e
đỏ,
n
cây
đ
Phải đả
m
Nếu khôn
g
y
trái, nod
e
T
HÊM NO
D
Chúng t
h
nhãn nhữ
n
e
mới đượ
c
n
ghĩa là c
ó
− X là
m
− P là n
o
− G là n
Trong
q
đ
ỏ đen, ch
ú
− Các p
h
− Các p
h
− Các p
h
Hìn
m
bảo tro
n
g
chẳng c
ó
e
ở đỉnh p
h
D
E
M
ỚI
a sẽ xem
x
n
g node li
ê
c
chèn, ho
ặ
ó
cùng mà
u
m
ột node c
h
o
de cha c
ủ
ode ông b
à
q
uá trình t
h
ú
ng ta sẽ t
h
h
ép lật mà
u
h
ép quay
k
h
ép quay t
r
h 3.
Q
n
g phép
q
ó
gì để qu
a
h
ải có nod
e
x
ét việc m
ô
ê
n quan.
X
ặ
c node c
o
u
đỏ).
h
o t
r
ước.
ủ
a X.
à
của X (n
o
h
êm vào
n
h
ực hiện c
u
trên đườ
n
k
hi node đ
ã
r
ên đường
Q
uay trái v
à
q
uay phải,
a
y vào điể
m
e
con phải.
ô
tả qui t
r
ì
X
là node
v
o
n khi nod
o
de cha c
ủ
n
ode mới
c
ác thao tá
c
n
g đi xuố
n
ã
được ch
è
đi xuống.
à
quay ph
ả
node ở đ
ỉ
m
đỉnh. T
ư
ì
nh chèn.
G
v
i phạm qu
y
e cha và
n
ủ
a P).
c
ó thể vi
p
c
sau đây:
n
g.
è
n.
ả
i
ỉ
nh phải c
ó
ư
ơng tự, n
ế
G
ọi X, P,
v
y
tắc (X c
ó
n
ode con x
u
p
hạm các
q
ó
node co
ế
u làm phé
v
à G để c
h
ó
thể là m
ộ
u
ng đột đ
ỏ
q
uy tắc c
ủ
4
n
p
h
ỉ
ộ
t
ỏ
-
ủ
a

4.1
phâ
n
đi q
u
phé
p
phé
p
con
nod
e
gọi
n
nod
e
hìn
h
Các phé
p
Phép th
ê
n
thông th
ư
u
a phải ha
y
Tuy nhi
ê
p
lật màu
v
Để bảo
p
lật màu
k
Nếu ph
é
đỏ, chúng
e
cha là no
Một ph
é
n
ode ở đỉ
n
e
cha). Ch
ú
h
4a.
H
ì
p
l
ật mà
u
ê
m vào tr
o
ư
ờng: đi t
h
y
trái tùy
v
ê
n, trong
c
v
à quay.
đảm khôn
k
hi cần the
o
é
p thêm và
ta đổi cá
c
de gốc, nó
é
p lật màu
n
h tam giá
c
ú
ng ta gọi
ì
nh 4a. t
r
ư
ớ
u
trên đư
ờ
o
ng cây đ
ỏ
h
eo một đ
ư
v
ào giá t
r
ị
c
c
ây đỏ đe
n
g vi phạ
m
o
quy tắc
n
o làm xuấ
t
c
node co
n
vẫn vẫn
g
ảnh hưởn
g
c
, node c
ó
hai node
Hìn
h
ớ
c khi lật
m
ờ
ng đi x
u
ỏ
đen bắt
ư
ờng dẫn
t
c
ủa khóa
n
n
, đến đượ
c
m
các quy
t
n
hư sau:
t
hiện tình
n
thành đe
n
g
iữ màu là
g
đến các
q
ó
màu đen
con trái v
à
h
4. Lật m
à
m
àu, Hình
u
ống
đầu như t
r
t
ừ node g
ố
n
ode và kh
ó
c
điểm ch
è
t
ắc màu, c
ầ
t
r
ạng một
n
và node
đen).
q
uy tắc đ
ỏ
trước phé
p
à
phải của
à
u
4b sau kh
i
r
ên cây tì
m
ố
c đến vị t
r
ó
a tìm kiế
m
è
n là phức
ầ
n phải ti
ế
node đen
cha thành
ỏ
-đen ra sa
o
p
lật là P
(
P là X1
v
i
lật màu.
m
kiếm n
h
r
í cần chè
n
m
.
tạp bởi c
á
ế
n hành c
á
có hai no
d
đỏ (trừ k
h
o
? chúng
t
(
P thay c
h
v
à X2. Xe
m
5
h
ị
n
,
á
c
á
c
d
e
h
i
t
a
h
o
m