You are on page 1of 54

Chng 9 Cay nh phan

Giao trnh Cau truc D lieu va Giai thuat 183


Chng 9 CAY NH| PHAN

So voI hIon fhuc IIon fuc cua cac cau fruc du IIou, cac danh sach IIon kof co
nhung uu dIom Ion vo fnh mom doo. Nhung chung cung co mof dIom you, do Ia su
fuan fu, chung duoc fo chuc fhoo cach ma vIoc dI chuyon fron chung chI co fho
qua fung phan fu mof. Trong chuong nay chung fa khac phuc nhuoc dIom nay
bang cach su dung cac cau fruc du IIou cay chua con fro. Cay duoc dung frong raf
nhIou ung dung, dac bIof frong vIoc fruy xuaf du IIou.
9.1. Cuc khu nem co bun ve cuy

Mof cuy |trcc) - hnh 9.1- gom mof fap huu han cac nut |noJc) va mof fap huu
han cac cunh |brancb) noI gIua cac nuf. Canh dI vao nuf goI Ia cunh vuo
|inJcgrcc), canh dI ra khoI nuf goI Ia cunh ru |outJcgrcc). So canh ra fu mof nuf
goI Ia buc |Jcgrcc) cua nuf do. Nou cay khong rong fh phaI co mof nuf goI Ia nut
goc |root), nut nuy khong co cunh vuo. Cay frong hnh 9.1 co M Ia nuf goc.
Cac nuf con IaI, moI nuf phaI co chInh xuc mot cunh vuo. Taf ca cac nuf dou co
fho co 0, 1, hoac nhIou hon so canh ra.









|a)
M
- A
- - N
- - C
- - - M | A | N C | ) ) O | Y | T X ) I S ) )
- |c)

- O
- - Y
- - - T
- - - X
- -
- - I
- - S
|b)
HInh 9.1 Cac cach bIou dIon cua cay

M
A
C N Y
D O
E L S
X T B
Chng 9 Cay nh phan
Giao trnh Cau truc D lieu va Giai thuat 184
Nut lu |/caj) duoc djnh nghIa nhu Ia nuf cua cay ma so canh ra bang 0. Cac
nuf khong phaI nuf goc hoac nuf Ia fh duoc goI Ia nut trung gun hay nut
trong |intcrna/ noJc). Nuf co so canh ra khac 0 co fho goI Ia nut chu |parcnt)
cua cac nuf ma canh ra cua no dI vao, cac nuf nay cung duoc goI Ia cac nut con
|cbi/J) cua no. Cac nuf cung cha duoc goI Ia cac nut unh em |sib/ing) voI nhau.
Nuf fron nuf cha co fho goI Ia nut ong |granJparcnt, frong mof so baI foan
chung fa cung can goI fon nhu vay do frnh bay gIaI fhuaf).

Thoo hnh 9.1, cac nuf Ia gom: N, , , T, X, , I, S; cac nuf frung gIan gom:
A, C, O, Y. Nuf Y Ia cha cua haI nuf T va X. T va X Ia con cua Y, va Ia nuf anh
om voI nhau.

Ouong d |patb) fu nuf n
1
don nuf n
k
duoc djnh nghIa Ia mof day cac nuf n
1
,
n
2
, , n
k
sao cho n
I
Ia nuf cha cua nuf n
I+1
voI 1 I< k. Cheu du |/cngtb) duong
d nay Ia so canh fron no, do Ia k-1. MoI nuf co duong dI chIou daI bang 0 don
chnh no. Trong mof cay, fu nuf goc don moI nuf con IaI chI co duy nhaf mof
duong dI.

oI voI moI nuf n
I
, do suu |Jcptb) hay con goI Ia muc |/coc/) cua no chnh Ia
chIou daI duong dI duy nhaf fu nuf goc don no cong 1. Nuf goc co muc bang 1.
Cheu cuo |bcigbt) cuu nut n
I
Ia chIou daI cua duong dI daI nhaf fu no don mof
nuf Ia. MoI nuf Ia co chIou cao bang 1. Cheu cuo cuu cuy bang chIou cao cua
nuf goc. Oo suu cuu cuy bang do sau cua nuf Ia sau nhaf, no Iuon bang chIou cao
cua cay.

Nou gIua nuf n
1
va nuf n
2
co mof duong dI, fh n
1
duoc goI Ia nut truo c
|anccstor) cua n
2
va n
2
Ia nut suu |JcsccnJant) cua n
1
.

M Ia nuf fruoc cua nuf . M Ia nuf goc, co muc Ia 1. uong dI fu M don Ia:
M, A, C, , co chIou daI Ia 3. co muc Ia 4.

Ia nuf Ia, co chIou cao Ia 1. ChIou cao cua C Ia 2, cua A Ia 3, va cua M Ia 4
chnh bang chIou cao cua cay.

Mof cay co fho duoc chIa fhanh nhIou cay con |subtrcc). Mof cay con Ia baf ky
mof cau fruc cay bon duoI cua nuf goc. Nuf dau fIon cua cay con Ia nuf goc cua no
va doI khI nguoI fa dung fon cua nuf nay do goI cho cay con. Cay con goc A |hay
goI faf Ia cay con A) gom cac nuf A, N, C, . Mof cay con cung co fho chIa fhanh
nhIou cay con khac. KhaI nIom cay con dan don djnh nghIa do quy cho cay nhu
sau:


Chng 9 Cay nh phan
Giao trnh Cau truc D lieu va Giai thuat 185
jnb ngba: Mof cay Ia fap cac nuf ma
- Ia fap rong, hoac
- co mof nuf goI Ia nuf goc co khong hoac nhIou cay con, cac cay con cung Ia cay
Cuc cuch beu den cuy
Thong fhuong co 3 cach bIou dIon cay: bIou dIon bang do fhj hnh 9.1a, bIou
dIon bang cach canh Io hnh 9.1b, va bIou dIon bang bIou fhuc co dau ngoac
hnh 9.1c.
9.2. Cuy nh{ phun
9.2.1. Cuc d{nh nghIu
jnb ngba: Mof cay nhj phan hoac Ia mof cay rong, hoac bao gom mof nuf goI Ia
nuf goc |root) va haI cay nhj phan duoc goI Ia cay con bon fraI va cay con bon
phaI cua nuf goc.

Iuu y rang djnh nghIa nay Ia djnh nghIa foan hoc cho mof cau fruc cay. o
dac fa cay nhj phan nhu mof kIou du IIou fruu fuong, chung fa can chI ra cac fac
vu co fho fhuc hIon fron cay nhj phan. Cac phuong fhuc co ban cua mof cay nhj
phan fong quaf chung fa ban don co fho Ia fao cay, gIaI phong cay, kIom fra cay
rong, duyof cay,

jnh nghIa nay khong quan fam don cach hIon fhuc cua cay nhj phan frong bo
nho. Chung fa so fhay ngay rang mof bIou dIon IIon kof Ia fu nhIon va do su
dung, nhung cac hIon fhuc khac nhu mang IIon fuc cung co fho fhch hop. jnh
nghIa nay cung khong quan fam don cac khoa hoac cach ma chung duoc sap fhu
fu. Cay nhj phan duoc dung cho nhIou muc dch khac hon Ia chI co fm kIom fruy
xuaf, do do chung fa can gIu mof djnh nghIa fong quaf.

Truoc khI xom xof xa hon vo cac dac fnh chung cua cay nhj phan, chung fa
hay quay vo djnh nghIa fong quaf va nhn xom ban chaf do quy cua no fho hIon
nhu fho nao frong cau fruc cua mof cay nhj phan nho.

Truong hop fhu nhaf, mof fruong hop co ban khong IIon quan don do quy, do
Ia mof cay nhj phan rong.

Cach duy nhaf do xay dung mof cay nhj phan co mof nuf Ia cho nuf do Ia goc
va cho haI cay con fraI va phaI Ia haI cay rong.

VoI cay co haI nuf, mof frong haI so Ia goc va nuf con IaI so fhuoc cay con.
Hoac cay con fraI hoac cay con phaI Ia cay rong, va cay con IaI chua chnh xac chI
Chng 9 Cay nh phan
Giao trnh Cau truc D lieu va Giai thuat 186
mof nuf. Nhu vay co haI cay nhj phan khac nhau co haI nuf. HaI cay nhj phan co
haI nuf co fho duoc vo nhu sau:


va


va day Ia haI cay khac nhau. Chung fa so khong bao gIo vo baf ky mof phan nao
cua mof cay nhj phan nhu sau:





do chung fa so khong fho noI duoc nuf bon duoI Ia con fraI hay con phaI cua nuf
fron.

oI voI fruong hop cay nhj phan co ba nuf, mof frong chung so Ia goc, va haI
nuf con IaI co fho duoc chIa gIua cay con fraI va cay con phaI fhoo mof frong cac
cach sau:
2 + 0 1 + 1 0 + 2

o co fho co haI cay nhj phan co haI nuf va chI co mof cay rong, fruong hop
fhu nhaf fron cho ra haI cay nhj phan. Truong hop fhu ba, fuong fu, cho fhom haI
cay khac. Truong hop gIua, cay con fraI va cay con phaI moI cay chI co mof nuf,
va chI co duy nhaf mof cay nhj phan co mof nuf non fruong hop nay chI co mof
cay nhj phan. Taf ca chung fa co nam cay nhj phan co ba nuf:









HInh 9.2- Cac cay nhj phan co ba nuf

Cac buoc do xay dung cay nay Ia mof dIon hnh cho cac fruong hop Ion hon.
Chung fa baf dau fu goc cua cay va xom cac nuf con IaI nhu Ia cac cach phan chIa
gIua cay con fraI va cay con phaI. Cay con fraI va cay con phaI Iuc nay so Ia cac
fruong hop nho hon ma chung fa da bIof.

Chng 9 Cay nh phan
Giao trnh Cau truc D lieu va Giai thuat 187
CoI N Ia so nuf cua cay nhj phan, H Ia chIou cao cua cay fh,

H
max
= N, H
mIn
= Iog
2
N +1
N
mIn
= H, N
max
= 2
H
-1

Khoang cach fu mof nuf don nuf goc xac djnh chI ph can do djnh vj no.
Chang han mof nuf co do sau Ia 5 fh chu ng fa phaI dI fu nuf goc va qua 5 canh
fron duong dI fu goc don no do fm don no. o do, nou cay cang fhap fh vIoc fm
don cac nuf so cang nhanh. Iou nay dan don fnh chaf can bang cua cay nhj
phan. Ho so can bang cua cay |ba/ancc jactor) Ia su chonh Ioch gIua chIou cao cua
haI cay con fraI va phaI cua no:
= H
I
-H
R

Mof cuy cun bung khI ho so nay bang 0 va cac cay con cua no cung can bang.
Mof cay nhj phan can bang voI chIou cao cho fruoc so co so nuf Ia Ion nhaf co
fho. Nguoc IaI, voI so nuf cho fruoc cay nhj phan can bang co chIou cao nho nhaf.
Thong fhuong dIou nay raf kho xay ra non djnh nghIa co fho noI Iong hon voI cac
frj = 1, 0, hoac 1 fhay v chI Ia 0. Chung fa so hoc ky hon vo cay can bang
AVI frong phan sau.

Mof cuy nh{ phun duy du |comp/ctc trcc) Ia cay co duoc so nuf foI da voI
chIou cao cua no. o cung chnh Ia cay co =0 voI moI nuf. Thuaf ngu cuy nh{
phun gun nhu duy du cung duoc dung cho fruong hop cay co duoc chIou cao foI
fhIou cua no va moI nuf o muc Ion nhaf don hof vo bon fraI.
Hnh 9.3 bIou dIon cay nhj phan day du co 31 nuf. CIa su IoaI dI cac nuf 19, 21,
23, 25, 27, 29, 31 fa co mof cay nhj phan gan nhu day du.
9.2.2. Ouyet cuy nh{ phun
Mof frong cac fac vu quan frong nhaf duoc fhuc hIon fron cay nhj phan Ia
duyof cay |traocrsa/). Mot phep duyet cuy lu mot su d chuyen quu khup
cuc nut cuu cuy theo mot thu tu d{nh truoc, mo nut ch duoc xu ly mot

HInh 9.3 Cay nhj phan day du voI 31 nuf.
Chng 9 Cay nh phan
Giao trnh Cau truc D lieu va Giai thuat 188
lun duy nhut. Cung nhu phop duyof fron cac cau fruc du IIou khac, hanh dong
ma chung fa can Iam khI gho qua mof nuf so phu fhuoc vao ung dung.

oI voI cac danh sach, cac nuf nam fhoo mof fhu fu fu nhIon fu nuf dau don
nuf cuoI, va phop duyof cung fhoo fhu fu nay. Tuy nhIon, doI voI cac cay, co raf
nhIou fhu fu khac nhau do duyof qua cac nuf.

Co 2 cach fIop can chnh khI duyof cay: duyof fhoo chIou sau va duyof fhoo
chIou rong.

uyof fhoo chIou sau |Jcjtb-jirst traocrsa/): moI nuf sau cua mof nuf con duoc
duyof fruoc khI sang mof nuf con khac.

uyof fhoo chIou rong |brcaJtb-jirst traocrsa/): moI nuf frong cung mof muc duoc
duyof fruoc khI sang muc khac.
9.2.2.1. Ouyet theo cheu suu
TaI mof nuf cho fruoc, co ba vIoc ma chung fa muon Iam: gho nuf nay, duyof
cay con bon fraI, duyof cay con bon phaI. Su khac nhau gIua cac phuong an duyof
Ia chung fa quyof djnh gho nuf do fruoc hoac sau khI duyof haI cay con, hoac gIua
khI duyof haI cay con.

Nou chung fa goI cong vIoc gho mof nuf Ia V, duyof cay con fraI Ia I, duyof
cay con phaI Ia R, fh co don sau cach kof hop gIua chung:

VIR IVR IRV VRI RVI RIV.

Cuc thu tu duyet cuy chuun

Thoo quy uoc chuan, sau cach duyof fron gIam xuong chI con ba boI chung fa
chI xom xof cac cach ma frong do cay con fraI duoc duyof fruoc cay con phaI. a
cach con IaI ro rang Ia fuong fu v chung chnh Ia nhung fhu fu nguoc cua ba cach
chuan. Cac cach chuan nay duoc daf fon nhu sau:

VIR IVR IRV
prcorJcr inorJcr postorJcr

Cac fon nay duoc chon fuong ung voI buoc ma nuf da cho duoc gho don. Trong
phop duyof prcorJcr, nuf duoc gho fruoc cac cay con; frong phop duyof inorJcr, no
duoc gho don gIua khI duyof haI cay con; va frong phop duyof postorJcr, goc cua
cay duoc gho sau haI cay con cua no.

Chng 9 Cay nh phan
Giao trnh Cau truc D lieu va Giai thuat 189
Phop duyof inorJcr doI khI con duoc goI Ia phop duyof doI xung |symmctric
orJcr), va postorJcr duoc goI Ia cnJorJcr.

Cuc vI du don gun

Trong v du fhu nhaf, chung fa hay xof cay nhj phan sau:






VoI phop duyof prcorJcr, goc cay mang nhan 1 duoc gho dau fIon, sau do phop
duyof dI chuyon sang cay con fraI. Cay con fraI chI chua mof nuf co nhan Ia 2,
nuf nay duoc duyof fhu haI. Sau do phop duyof chuyon sang cay con phaI cua nu f
goc, cuoI cung Ia nuf mang nhan 3 duoc gho. Vay phop duyof proordor so gho cac
nuf fhoo fhu fu 1, 2, 3.

Truoc khI goc cua cay duoc gho fhoo fhu fu inorJcr, chung fa phaI duyof cay
con fraI cua no fruoc. o do nuf mang nhan 2 duoc gho dau fIon. o Ia nuf duy
nhaf frong cay con fraI. Sau do phop duyof chuyon don nuf goc mang nhan 1, va
cuoI cung duyof qua cay con phaI. Vay phop duyof Inordor so gho cac nuf fhoo fhu
fu 2, 1, 3.

VoI phop duyof postorJcr, chung fa phaI duyof cac haI cay con fraI va phaI
fruoc khI gho nuf goc. Truoc fIon chung fa dI don cay con bon fraI chI co mof nuf
mang nhan 2, va no duoc gho dau fIon. TIop fhoo, chung fa duyof qua cay con
phaI, gho nuf 3, va cuoI cung chung fa gho nuf 1. Phop duyof postorJcr duyof cac
nuf fhoo fhu fu 2, 3, 1.

V du fhu haI phuc fap hon, chung fa hay xom xof cay nhj phan duoI day:











1
2 3
1
2
3
4
5
Chng 9 Cay nh phan
Giao trnh Cau truc D lieu va Giai thuat 190
Tuong fu cach Iam fron chung fa co phop duyof prcorJcr so gho cac nuf fhoo
fhu fu 1, 2, 3, 4, 5. Phop duyof inorJcr so gho cac nuf fhoo fhu fu 1, 4, 3, 5, 2.
Phop duyof postorJcr so gho cac nuf fhoo fhu fu 4, 5, 3, 2, 1.

Cuy beu thuc

Cach chon cac fon prcorJcr, inorJcr, va postorJcr cho ba phop duyof cay fron
khong phaI Ia fnh co, no IIon quan chaf cho don mof frong nhung ung dung, do
Ia cac cay bIou fhuc.

Mof cay bIou fhuc |cxprcssion trcc) duoc fao non fu cac foan hang don gIan va
cac foan fu |so hoc hoac Iuan Iy) cua bIou fhuc bang cach fhay fho cac foan hang
don gIan bang cac nuf Ia cua mof cay nhj phan va cac foan fu bang cac nuf bon
frong cay. oI voI moI foan fu haI ngoI, cay con fraI chua moI foan hang va moI
foan fu fhuoc foan hang bon fraI cua foan fu do, va cay con phaI chua moI foan
hang va moI foan fu fhuoc foan hang bon phaI cua no.

oI voI foan fu mof ngoI, mof frong haI cay con so rong. Chung fa fhuong vIof
mof vaI foan fu mof ngoI pha bon fraI cua foan hang cua chung, chang han dau
fru |phop Iay so am) hoac cac ham chuan nhu Iog|) va cos|). Cac foan fu mof ngoI
khac duoc vIof bon phaI cua foan hang, chang han ham gIaI fhua |)! hoac ham
bnh phuong |)
2
. oI khI ca haI pha dou hop Io, nhu phop Iay dao ham co fho vIof
J1Jx pha bon fraI, hoac |) pha bon phaI, hoac foan fu fang ++ co anh huong

HInh 9.4 Cay bIou fhuc
Chng 9 Cay nh phan
Giao trnh Cau truc D lieu va Giai thuat 191
khac nhau khI nam bon fraI hoac nam bon phaI. Nou foan fu duoc ghI bon fraI,
fh frong cay bIou fhuc no so co cay con fraI rong, nhu vay foan hang so xuaf hIon
bon phaI cua no frong cay. Nguoc IaI, nou foan fu xuaf hIon bon phaI, fh cay con
phaI cua no so rong, va foan hang so Ia cay con fraI cua no.

Mof so cay bIou fhuc cua mof vaI bIou fhuc don gIan duoc mInh hoa frong hnh
9.4. Hnh 9.5 bIou dIon mof cong fhuc bac haI phuc fap hon. a fhu fu duyof cay
chuan cho cay bIou fhuc nay IIof ko frong hnh 9.6.
Cac fon cua cac phop duyof IIon quan don cac dang aIan cua bIou fhuc: duyof
cay bIou fhuc fhoo prcorJcr Ia dang prcjix, frong do moI foan fu nam fruoc cac
foan hang cua no; duyof cay bIou fhuc fhoo inorJcr Ia dang injix |cach vIof bIou
fhuc quon fhuoc cua chung fa); duyof cay bIou fhuc fhoo postorJcr Ia dang postjix,
moI foan hang nam fruoc foan fu cua chung. Nhu vay cac cay con fraI va cay con
phaI cua moI nuf Iuon Ia cac foan hang cua no, va vj fr fuong doI cua mof foan fu
so voI cac foan hang cua no frong ba dang aIan hoan foan gIong voI fhu fu fuong
doI cua cac Ian gho cac fhanh phan nay fhoo mof frong ba phop duyof cay bIou
fhuc.

HInh 9.5 Cay bIou fhuc cho cong fhuc bac haI.
Chng 9 Cay nh phan
Giao trnh Cau truc D lieu va Giai thuat 192

Cuy so sunh

Chung fa hay xom IaI v du frong hnh 9.7 va ghI IaI kof qua cua ba phop
duyof cay chuan nhu sau:

prcorJcr. JIm of Amy Ann Cuy va Jan Ron Kay Jon KIm TIm Roy Tom
inorJcr: Amy Ann of va Cuy Jan JIm Jon Kay KIm Ron Roy TIm Tom
postorJcr:Ann Amy va Jan Cuy of Jon KIm Kay Roy Tom TIm Ron JIm

Phop duyof inorJcr cho cac fon co fhu fu fhoo aIphabof. Cach fao mof cay so
sanh nhu hnh 9.7 nhu sau: dI chuyon sang fraI khI khoa cua nuf can fhom nho
hon khoa cua nuf dang xof, nguoc IaI fh dI chuyon sang phaI. Nhu vay cay nhj
phan fron da duoc xay dung sao cho moI nuf frong cay con fraI cua moI nuf co fhu
fu nho hon fhu fu cua no, va moI nuf frong cay con phaI co fhu fu Ion hon no. o
doI voI moI nuf, phop duyof inorJcr so duyof qua cac nuf frong cay con fraI fruoc,
roI don chnh no, va cuoI cung Ia cac nuf frong cay con phaI, non chung fa co duoc
cac nuf fhoo fhu fu.


HInh 9.6 Cac fhu fu duyof cho cay bIou fhuc

HInh 9.? Cay so sanh do fm nhj phan
Chng 9 Cay nh phan
Giao trnh Cau truc D lieu va Giai thuat 193
Trong phan sau chung fa so fm hIou cac cay nhj phan voI dac fnh fron,
chung con duoc goI Ia cac cay nhj phan fm kIom |binary scarcb trcc), do chung
raf co ch va hIou qua cho you cau fm kIom.
9.2.2.2. Ouyet theo cheu rong

Thu fu duyof cay fhoo chIou rong Ia fhu fu duyof hof muc nay don muc kIa, co
fho fu muc cao don muc fhap hoac nguoc IaI. Trong moI muc co fho duyof fu fraI
sang phaI hoac fu phaI sang fraI. V du cay frong hnh 9.7 nou duyof fhoo chIou
rong fu muc fhap don muc cao, frong moI muc duyof fu fraI sang phaI, fa co: JIm,
of, Ron, Amy, Cuy, Kay, TIm, Ann, va, Jan, Jon, KIm, Roy, Tom.
9.2.3. Hen thuc len ket cuu cuy nh{ phun
Chung fa hay xom xof cach bIou dIon cua cac nuf do xay dung non cay.
9.2.3.1. Cuu truc co bun cho mot nut trong cuy nh{ phun

MoI nuf cua mof cay nhj phan |cung Ia goc cua mof cay con nao do) co haI cay
con fraI va phaI. Cac cay con nay co fho duoc xac djnh fhong qua cac con fro chI
don cac nuf goc cua no. Chung fa co dac fa sau:

t empl at e <cl ass Ent r y>
struct Binary_node {
/ / Cac fhanh phan.
Ent r y data;
Bi nar y_node<Ent r y> *left;
Bi nar y_node<Ent r y> *right;
HInh 9.8 Cay nhj phan IIon kof
Chng 9 Cay nh phan
Giao trnh Cau truc D lieu va Giai thuat 194
/ / constructors:
Bi nar y_node( ) ;
Bi nar y_node( const Ent r y &x) ;
};

Bi nar y_node chua haI constructor dou khoI gan cac fhuoc fnh con fro Ia NULL
moI khI doI fuong duoc fao ra.

Trong hnh 9.8, chung fa fhay nhung fham chIou NULL, fuy nhIon chung fa co
fho quy uoc rang cac cay con rong va cac canh don no co fho bo qua khong can
hIon fhj khI vo cay.
9.2.3.2. Ouc tu cuy nh{ phun
Mof cay nhj phan co mof hIon fhuc fu nhIon frong vung nho IIon kof. Cung
nhu cac cau fruc IIon kof, chung fa so cap phaf dong cac nuf, noI kof chung IaI voI
nhau. Chung fa chI can mof con fro chI don nuf goc cua cay.

t empl at e <cl ass Ent r y>
cl ass Binary_tree {
publ i c:
Bi nar y_t r ee( ) ;
bool empt y( ) const ;
voi d pr eor der ( voi d ( *vi si t ) ( Ent r y &) ) ;
voi d i nor der ( voi d ( *vi si t ) ( Ent r y &) ) ;
voi d post or der ( voi d ( *vi si t ) ( Ent r y &) ) ;

i nt si ze( ) const ;
voi d cl ear ( ) ;
i nt hei ght ( ) const ;
voi d i nser t ( const Ent r y &) ;

Bi nar y_t r ee ( const Bi nar y_t r ee<Ent r y> &or i gi nal ) ;
Bi nar y_t r ee & oper at or =( const Bi nar y_t r ee<Ent r y> &or i gi nal ) ;
~Bi nar y_t r ee( ) ;

pr ot ect ed:
/ / Cac ham do quy phu fro:
voi d recursive_inorder( Bi nar y_node<Ent r y>*sub_root,
voi d ( *visit) ( Ent r y &) )
voi d recursive_preorder( Bi nar y_node<Ent r y>*sub_root,
voi d ( *visit) ( Ent r y &) )
voi d recursive_postorder( Bi nar y_node<Ent r y>*sub_root,
voi d ( *visit) ( Ent r y &) )

Bi nar y_node<Ent r y> *root;
};

VoI con fro r oot , co fho do dang nhan ra mof cay nhj phan rong boI bIou fhuc

r oot == NULL;

va khI fao mof cay nhj phan moI chung fa chI can gan r oot bang NULL.
Chng 9 Cay nh phan
Giao trnh Cau truc D lieu va Giai thuat 195
t empl at e <cl ass Ent r y>
Bi nar y_t r ee<Ent r y>: : Binary_tree( )
/ *
post: Cay nhj phan rong duoc fao ra.
*/
{
r oot = NULL;
}

Phuong fhuc empt y kIom fra xom mof cay nhj phan co rong hay khong:

t empl at e <cl ass Ent r y>
bool Bi nar y_t r ee<Ent r y>: : empty( ) const
/ *
post: Tra vo t r ue nou cay rong, nguoc IaI fra vo f al se.
*/
{
r et ur n r oot == NULL;
}
9.2.3.3. Ouyet cuy

ay gIo chung fa so xay dung cac phuong fhuc duyof mof cay nhj phan IIon kof
fhoo ca ba phop duyof co ban. Cung nhu fruoc kIa, chung fa so gIa su nhu chung
fa da co ham vi si t do fhuc hIon mof cong vIoc mong muon nao do cho moI nuf
cua cay. Va nhu cac ham duyof cho nhung cau fruc du IIou khac, con fro ham
vi si t so Ia mof fhong so hnh fhuc cua cac ham duyof cay.

Trong cac ham duyof cay, chung fa can gho don nuf goc va duyof cac cay con
cua no. o quy so Iam cho vIoc duyof cac cay con fro non hof suc do dang. Cac cay
con duoc fm fhay nho cac con fro frong nuf goc, do do cac con fro nay can duoc
chuyon cho cac Ian goI do quy. MoI phuong fhuc duyof can goI ham do quy co mof
fhong so con fro. Chang han, phuong fhuc duyof inorJcr duoc vIof nhu sau:

t empl at e <cl ass Ent r y>
voi d Bi nar y_t r ee<Ent r y>: : inorder( voi d ( *visit) ( Ent r y &) )
/ *
post: Cay duoc duyof fhoo fhu fu inorJcr
uses: Ham r ecur si ve_i nor der
*/
{
r ecur si ve_i nor der ( r oot , vi si t ) ;
}

Mof cach fong quaf, chung fa nhan fhay mof cach fong quaf rang baf ky
phuong fhuc nao cua Bi nar y_froo ma ban chaf Ia mof qua frnh do quy cung duoc
hIon fhuc bang cach goI mof ham do quy phu fro co fhong so Ia goc cua cay. Ham
duyof inorJcr phu fro duoc hIon fhuc bang cach goI do quy don gIan nhu sau:

Chng 9 Cay nh phan
Giao trnh Cau truc D lieu va Giai thuat 196
t empl at e <cl ass Ent r y>
voi d Bi nar y_t r ee<Ent r y>: : recursive_inorder( Bi nar y_node<Ent r y>*sub_root, voi d
( *visit) ( Ent r y &) )
/ *
pre: sub_r oot hoac Ia NULL hoac chI don goc cua mof cay con.
post: Cay con duoc duyof fhoo fhu fu inorJcr.
uses: Ham r ecur si ve_i nor der duoc goI do quy.
*/
{
i f ( sub_r oot ! = NULL) {
recursive_inorder( sub_r oot - >left, vi si t ) ;
( *vi si t ) ( sub_r oot - >dat a) ;
recursive_inorder( sub_r oot - >right, vi si t ) ;
}
}

Cac phuong fhuc duyof khac cung duoc xay dung mof cach fuong fu bang cach
goI cac ham do quy phu fro. cac ham do quy phu fro co hIon fhuc nhu sau:

t empl at e <cl ass Ent r y>
voi d Bi nar y_t r ee<Ent r y>: : recursive_preorder( Bi nar y_node<Ent r y> *sub_root,
voi d ( *visit) ( Ent r y &) )
/ *
pre: sub_r oot hoac Ia NULL hoac chI don goc cua mof cay con.
post: Cay con duoc duyof fhoo fhu fu prcorJcr.
uses: Ham r ecur si ve_i nor der duoc goI do quy.
*/
{
i f ( sub_r oot ! = NULL) {
( *vi si t ) ( sub_r oot - >dat a) ;
recursive_preorder( sub_r oot - >left, vi si t ) ;
recursive_preorder( sub_r oot - >right, vi si t ) ;
}
}

t empl at e <cl ass Ent r y>
voi d Bi nar y_t r ee<Ent r y>: : recursive_postorder( Bi nar y_node<Ent r y> *sub_root,
voi d ( *visit) ( Ent r y &) )
/ *
pre: sub_r oot hoac Ia NULL hoac chI don goc cua mof cay con.
post: Cay con duoc duyof fhoo fhu fu postorJcr.
uses: Ham r ecur si ve_i nor der duoc goI do quy.
*/
{
i f ( sub_r oot ! = NULL) {
recursive_postorder( sub_r oot - >left, vi si t ) ;
recursive_postorder( sub_r oot - >right, vi si t ) ;
( *vi si t ) ( sub_r oot - >dat a) ;
}
}

Chuong frnh duyof cay fhoo chIou rong Iuon phaI su dung don CTI hang
doI. Nou duyof fhoo fhu fu fu muc fhap don muc cao, moI muc duyof fu fraI sang
phaI, fruoc fIon nuf goc duoc dua vao hang doI. Cong vIoc duoc Iap cho don khI
Chng 9 Cay nh phan
Giao trnh Cau truc D lieu va Giai thuat 197
hang doI rong: Iay mof nuf ra khoI hang doI, xu Iy cho no, dua cac nuf con cua no
vao hang doI |fhoo dung fhu fu fu fraI sang phaI). Cac bIon fho khac cua phop
duyof cay fhoo chIou rong cung vo cung don gIan, sInh vIon co fho fu suy nghI
fhom.

Chung fa do phan hIon fhuc cac phuong fhuc cua cay nhj phan nhu height,
size, va clear nhu Ia baI fap. Cac phuong fhuc nay cung duoc hIon fhuc do
dang bang cach goI cac ham do quy phu fro. Trong phan baI fap chung fa cung so
vIof phuong fhuc insert do fhom cac phan fu vao cay nhj phan, phuong fhuc
nay can do fao mof cay nhj phan, sau do, kof hop voI cac phuong fhuc nou fron,
chung fa so kIom fra Iop Bi nar y_t r ee ma chung fa xay dung duoc.

Trong phan sau cua chuong nay, chung fa so xay dung cac Iop dan xuaf fu cay
nhj phan co nhIou dac fnh va huu ch hon |cac Iop dan xuaf nay so co cac phuong
fhuc fhom hoac IoaI phan fu frong cay fhch hop voI dac fnh cua fung IoaI cay).
Con hIon faI fh chung fa khong non fhom nhung phuong fhuc nhu vay vao cay
nhj phan co ban.

Mac du Iop Bi nar y_t r ee cua chung fa xuaf hIon chI nhu Ia mof Iop vo ma cac
phuong fhuc cua no dou day cac cong vIoc can Iam don cho cac ham phu fro, ban
fhan no IaI mang mof y nghIa quan frong. Iop nay fap frung vao no nhIou ham
khac nhau va cung cap mof gIao dIon fhuan fIon fuong fu cac kIou du IIou fruu
fuong khac. Hon nua, chnh Iop moI co fho cung cap fnh dong kn: khong co no
fh cac du IIou frong cay khong duoc bao vo mof cach an foan va do dang bj fham
nhap va sua doI ngoaI y muon. CuoI cung, chung fa co fho fhay Iop Bi nar y_t r ee
con Iam mof Iop co so cho cac Iop khac dan xuaf fu no huu ch hon.
9.3. Cuy nh{ phun tIm kem
Chung fa hay xom xof van do fm kIom mof khoa frong mof danh sach IIon
kof. Khong co cach nao khac ngoaI cach dI chuyon fron danh sach moI Ian mof
phan fu, va do do vIoc fm kIom fron danh sach IIon kof Iuon Ia fm fuan fu. VIoc
fm kIom so fro non nhanh hon nhIou nou chung fa su dung danh sach IIon fuc va
fm nhj phan. Tuy nhIon, danh sach IIon fuc IaI khong phu hop voI su bIon dong
du IIou. CIa su chung fa cung can fhay doI danh sach fhuong xuyon, fhom cac
phan fu moI hoac IoaI cac phan fu hIon co. Nhu vay danh sach IIon fuc so cha m
hon nhIou so voI danh sach IIon kof, do vIoc fhom va IoaI phan fu frong danh
sach IIon fuc moI Ian dou doI hoI phaI dI chuyon nhIou phan fu sang cac vj fr
khac. Trong danh sach IIon kof chI can fhay doI mof vaI con fro ma fhoI.

Van do chu chof frong phan nay chnh Ia:
Licu cbung ta co tbc tm mot bicn tbuc cbo cac Janb sacb co tbu tu ma trong
Jo cbung ta co tbc tm kicm, boac tbcm bot pban tu Jcu rat nbanb:
Chng 9 Cay nh phan
Giao trnh Cau truc D lieu va Giai thuat 198
Cay nhj phan cho mof IoI gIaI fof cho van do nay. ang cach daf cac ent r y
cua mof danh sach co fhu fu vao frong cac nuf cua mof cay nhj phan, chung fa so
fhay rang chung fa co fho fm mof khoa cho fruoc qua O|Iog n) buoc, gIong nhu
fm nhj phan, dong fhoI chung fa cung co gIaI fhuaf fhom va IoaI phan fu frong
O|Iog n) fhoI gIan.

jnb ngba: Mof cay nhj phan fm kIom |binary scarcb trcc -ST) Ia mof cay
hoac rong hoac frong do moI nuf co mof khoa |nam frong phan du IIou cua no)
va fhoa cac dIou kIon sau:
1. Khoa cua nuf goc Ion hon khoa cua baf ky nuf nao frong cay con fraI cua no.
2. Khoa cua nuf goc nho hon khoa cua baf ky nuf nao frong cay con phaI cua no.
3. Cay con fraI va cay con phaI cua goc cung Ia cac cay nhj phan fm kIom.

HaI dac fnh dau fIon mo fa fhu fu IIon quan don khoa cua nuf goc, dac fnh
fhu ba mo rong chung don moI nuf frong cay; do do chung fa co fho fIop fuc su
dung cau fruc do quy cua cay nhj phan. Chung fa da vIof djnh nghIa nay fhoo
cach ma no bao dam rang khong co haI phan fu frong mof cay nhj phan fm kIom
co cung khoa, do cac khoa frong cay con fraI chnh xac Ia nho hon khoa cua goc,
va cac khoa cua cay con phaI cung chnh xac Ia Ion hon khoa cua goc. Chung fa co
fho fhay doI djnh nghIa do cho phop cac phan fu frung khoa. Tuy nhIon frong
phan nay chung fa co fho gIa su rang:

Kbong co bai pban tu trong mot cay nbj pban tm kicm co trung kboa.

Cac cay nhj phan frong hnh 9.7 va 9.8 Ia cac cay nhj phan fm kIom, do quyof
djnh dI chuyon sang fraI hoac phaI faI moI nuf dua fron cach so sanh cac khoa
frong djnh nghIa cua mof cay fm kIom.

9.3.1. Cuc dunh such co thu tu vu cuc cuch hen thuc
a don Iuc baf dau xay dung cac phuong fhuc C++ do xu Iy cho cay nhj phan
fm kIom, chung fa non Iuu y rang co f nhaf Ia ba quan dIom khac nhau duoI day:

Chung fa co fho xom cay nhj phan fm kIom nhu mof kIou du IIou fruu fuong
moI voI djnh nghIa va cac phuong fhuc cua no;
o cay nhj phan fm kIom Ia mof dang dac bIof cua cay nhj phan, chung fa co
fho xom cac phuong fhuc cua no nhu cac dang dac bIof cua cac phuong fhuc cua
cay nhj phan;
o cac phan fu frong cay nhj phan fm kIom co chua cac khoa, va do chung
duoc gan du IIou do fruy xuaf fhong fIn fhoo cach fuong fu nhu cac danh sach
co fhu fu, chung fa co fho nghIon cuu cay nhj phan fm kIom nhu Ia mof hIon
fhuc moI cua kIou du IIou fruu fuong danh sach co fhu fu |orJcrcJ /ist ADT).
Chng 9 Cay nh phan
Giao trnh Cau truc D lieu va Giai thuat 199
Trong fhuc fo, doI khI cac Iap frnh vIon chI fap frung vao mof frong ba quan
dIom fron, va chung fa cung so nhu fho. Chung fa so dac fa Iop cay nhj phan fm
kIom dan xuaf fu cay nhj phan. Nhu vay, Iop cay nhj phan cua chung fa IaI bIo u
dIon cho mof kIou du IIou fruu fuong khac. Tuy nhIon, Iop moI so fhua ko cac
phuong fhuc cua Iop cay nhj phan fruoc kIa. ang cach nay, su su dung Iop fhua
ko nhan manh vao haI quan dIom fron. Quan dIom fhu ba fhuong duoc nhn fhay
frong cac ung dung cua cay nhj phan fm kIom. Chuong frnh cua nguoI su dung
co fho dung Iop cua chung fa do gIaI quyof cac baI foan sap fhu fu va fm kIom
IIon quan don danh sach co fhu fu.

Chung fa da dua ra nhung khaI bao C++ cho phop xu Iy cho cay nhj phan.
Chung fa so su dung hIon fhuc nay cua cay nhj phan Iam co so cho Iop cay nhj
phan fm kIom.

t empl at e <cl ass Recor d>
cl ass Search_tree: publ i c Bi nar y_t r ee<Recor d> {
publ i c:
Er r or _code i nser t ( const Recor d &new_dat a) ;
Er r or _code r emove( const Recor d &ol d_dat a) ;
Er r or _code t r ee_sear ch( Recor d &t ar get ) const ;
pr i vat e: / / Cac ham do quy phu fro.
};

o Iop cay nhj phan fm kIom fhua ko fu Iop nhj phan, chung fa co fho dung
IaI cac phuong fhuc da djnh nghIa fron cay nhj phan fong quaf cho cay nhj phan
fm kIom. Cac phuong fhuc nay Ia const r uct or , dest r uct or , cl ear , empt y,
si ze, hei ght , va cac phuong fhuc duyof pr eor der , i nor der , post or der . o
fhom vao cac phuong fhuc nay, mof cay nhj phan fm kIom can fhom cac phuong
fhuc chuyon bIof hoa nhu i nser t , r emove, va t r ee_sear ch.

9.3.2. TIm kem tren cuy
Phuong fhuc moI quan frong dau fIon cua cay nhj phan fm kIom Ia: fm mof
phan fu voI mof khoa cho fruoc frong cay nhj phan fm kIom IIon kof. ac fa cua
phuong fhuc nhu sau:

Er r or _code Sear ch_t r ee<Recor d> : : tree_search ( Recor d &target) const ;
post: Nou co mof phan fu co khoa frung voI khoa frong target, fh target duoc chop do boI
phan fu nay, phuong fhuc fra vo success; nguoc IaI phuong fhuc fra vo not _pr esent .

O day chung fa dung Iop Recor d nhu da mo fa frong chuong ?. NgoaI fhuoc
fnh fhuoc Iop Key danh cho khoa, frong Recor d co fho con nhIou fhanh phan du
IIou khac. Trong cac ung dung, phuong fhuc nay fhuong duoc goI voI fhong so
t ar get chI chua frj cua fhanh phan khoa. Nou fm fhay khoa can fm, phuong
fhuc so bo sung cac du IIou day du vao cac fhanh phan khac con IaI cua Recor d.
Chng 9 Cay nh phan
Giao trnh Cau truc D lieu va Giai thuat 200
9.3.2.1. Chen luoc
o fm mof khoa, fruoc fIon chung fa so sanh no voI khoa cua nuf goc frong
cay. Nou so frung, gIaI fhuaf dung. Nguoc IaI, chung fa dI sang cay con fraI hoac
cay con phaI va Iap IaI vIoc fm kIom frong cay con nay.

V du, chung fa can fm fon KIm frong cay nhj phan fm kIom hnh 9.7 va 9.8.
Chung fa so sanh KIm voI phan fu faI nuf goc, JIm. o KIm Ion hon JIm fhoo fhu
fu a/pbabct, chung fa dI sang phaI va fIop fuc so sanh KIm voI Ron. o KIm nho
hon Jon, chung fa dI chuyon sang fraI, so sanh KIm voI Kay. Chung fa IaI dI
chuyon sang phaI va gap duoc phan fu can fm.

ay ro rang Ia mof qua frnh do quy, cho non chung fa so hIon fhuc phuong
fhuc nay bang cach goI mof ham do quy phu fro. IIou dIou kIon dung cua vIoc fm
kIom do quy Ia g7 Ro rang Ia, nou chung fa fm fhay phan fu can fm, ham so ko f
fhuc fhanh cong. Nou khong, chung fa so cu fIop fuc fm cho don khI gap mof cay
rong, frong fruong hop nay vIoc fm kIom fhaf baI.

Ham do quy fm kIom phu fro so fra vo mof con fro chI don phan fu duoc fm
fhay. Mac du con fro nay co fho duoc su dung do fruy xuaf don du IIou Iuu frong
doI fuong cay, nhung chI co cac ham Ia nhung phuong fhuc cua cay moI co fho goI
ham fm kIom phu fro nay |v chI co chung moI co fho goI fhuoc fnh r oot cua
cay Iam fhong so). Nhu vay, vIoc fra vo con fro don mof nuf so khong vI pham
don fnh dong kn cua cay khI nhn fu ung dung bon ngoaI. Chung fa co dac fa
sau day cua ham fm kIom phu fro.

Bi nar y_node<Recor d> *Sear ch_t r ee<Recor d> : : search_for_node
( Bi nar y_node<Recor d> *sub_root, const Recor d &target) const ;
pre: sub_r oot hoac Ia NULL hoac chI don mof cay con cua Iop Sear ch_t r ee.
post: Nou khoa cua t ar get khong co frong cay con sub_t r ee, ham fra vo NULL; nguoc IaI, ham
fra vo con fro don nuf chua t ar get .
9.3.2.2. Phen bun de quy
Cach don gIan nhaf do vIof ham fm kIom fron Ia dung do quy:

t empl at e <cl ass Recor d>
Bi nar y_node<Recor d> *Sear ch_t r ee<Recor d>: : search_for_node(
Bi nar y_node<Recor d>* sub_root, const Recor d &target) const
{
i f ( sub_r oot == NULL | | sub_r oot - >dat a == t ar get ) r et ur n sub_r oot ;
el se i f ( sub_r oot - >dat a < t ar get )
r et ur n search_for_node( sub_r oot - >right, t ar get ) ;
el se r et ur n search_for_node( sub_r oot - >left, t ar get ) ;
}

Chng 9 Cay nh phan
Giao trnh Cau truc D lieu va Giai thuat 201
9.3.2.3. Khu de quy
o quy xuaf hIon frong ham fron chI Ia do quy duoI, do Ia Ionh cuoI cung duoc
fhuc hIon frong ham. ang cach su dung vong Iap, do quy duoI Iuon co fho duoc
fhay fho boI su Iap IaI nhIou Ian. Trong fruong hop nay chung fa can vIof vong
Iap fho cho Ionh i f dau fIon, va fhay doI fhong so sub_r oot do no dI chuyon
xuong cac canh cua cay.

t empl at e <cl ass Recor d>
Bi nar y_node<Recor d> *Sear ch_t r ee<Recor d>: : search_for_node(
Bi nar y_node<Recor d> *sub_root, const Recor d &t ar get ) const
{ while ( sub_r oot ! = NULL && sub_r oot - >dat a ! = t ar get )
i f ( sub_r oot - >dat a < t ar get )
sub_root = sub_r oot - >r i ght ;
el se sub_root = sub_r oot - >l ef t ;
r et ur n sub_r oot ;
}
9.3.2.4. Phuong thuc tree_search
Phuong fhuc t r ee_sear ch don gIan chI goI ham phu fro sear ch_f or _node
do fm nuf chua khoa frung voI khoa can fm frong cay fm kIom nhj phan. Sau
do no frch du IIou can fhIof va fra vo Er r or _code fuong ung.

t empl at e <cl ass Recor d>
Er r or _code Sear ch_t r ee<Recor d>: : tree_search( Recor d &t ar get ) const
/ *
post: Nou fm fhay khoa can fm frong t ar get , phuong fhuc so bo sung cac du IIou day du vao
cac fhanh phan khac con IaI cua t ar get va fra vo success. Nguoc IaI fra vo
not _pr esent . Ca haI fruong hop cay dou khong fhay doI.
Uses: Ham sear ch_f or _node
*/
{
Er r or _code r esul t = success;
Bi nar y_node<Recor d> *f ound = search_for_node( r oot , t ar get ) ;
i f ( f ound == NULL)
r esul t = not _pr esent ;
el se
t ar get = found->data;
r et ur n r esul t ;
}
9.3.2.5. Hunh v cuu gu thuut
Chung fa fhay rang t r ee_sear ch dua fron co so cua fm nhj phan. Nou chung
fa fhuc hIon fm nhj phan fron mof danh sach co fhu fu, chung fa fhay rang fm
nhj phan fhuc hIon cac phop so sanh hoan foan gIong nhu t r ee_sear ch. Chung
fa cung da bIof fm nhj phan fhuc hIon O|Iog n) Ian so sanh doI voI danh sach co
chIou daI n. Iou nay fhuc su fof so voI cac phuong phap fm kIom khac, do Iog n
fang raf cham khI n fang.

Chng 9 Cay nh phan
Giao trnh Cau truc D lieu va Giai thuat 202
Cay frong hnh 9.9a Ia cay fof nhaf doI voI vIoc fm kIom. Cay cang ram rap
cang fof: no co chIou cao nho nhaf doI voI so nuf cho fruoc. So nuf nam gIua nuf
goc va nuf can fm, ko ca nuf can fm, Ia so Ian so sanh can fhuc hIon khI fm
kIom. V vay, cay cang ram rap fh so Ian so sanh nay cang nho.

Khong phaI chung fa Iuon co fho du doan fruoc hnh dang cua mof cay nhj
phan fm kIom fruoc khI cay duoc fao ra, va cay o hnh |b) Ia mof cay dIon hnh
fhuong co nhaf so voI cay o hnh |a). Trong cay nay, vIoc fm phan fu c can bon
Ian so sanh, con hnh |a) chI can ba Ian so sanh. Tuy nhIon, cay o hnh |b) van
con fuong doI ram rap va vIoc fm kIom fron no chI do hon mof f so voI cay foI
uu frong hnh |a).
Trong hnh |c), cay da fro non suy fhoaI, va vIoc fm phan fu c can don 6 Ian
so sanh. Hnh |d) va |o) cac cay da fro fhanh chuoI cac mac xch. KhI fm fron cac
chuoI mac xch nhu vay, t r ee_sear ch khong fho Iam duoc g khac hon Ia duyof
fu phan fu nay sang phan fu kIa. NoI cach khac, free_sear ch khI fhuc hIon fron
chuoI cac mac xch nhu vay da suy fhoaI fhanh fm fuan fu. Trong fruong hop xau

HInh 9.9 Mof vaI cay nhj phan fm kIom co cac khoa gIong nhau
Chng 9 Cay nh phan
Giao trnh Cau truc D lieu va Giai thuat 203
nhaf nay, voI mof cay co n nuf, t r ee_sear ch co fho can don n Ian so sanh do
fm mof phan fu.

Trong fhuc fo, nou cac nuf duoc fhom vao mof cay nhj phan fm kIom froo mof
fhu fu ngau nhIon, fh raf hIom khI cay fro non suy fhoaI fhanh cac dang nhu o
hnh |d) hoac |o). Thay vao do, cay so co hnh dang gan gIong voI hnh |a) hoac
|b). o do, hau nhu Ia t r ee_sear ch Iuon fhuc hIon gan gIong voI fm nhj phan.
oI voI cay nhj phan fm kIom ngau nhIon, su fhuc hIon t r ee_sear ch chI cham
hon 39% so voI su fm kIom foI uu voI Ig n Ian so sanh cac khoa, va nhu vay no
cung fof hon raf nhIou so voI fm fuan fu co n Ian so sanh.

9.3.3. Them phun tu vuo cuy nh{ phun tIm kem
9.3.3.1. Out vun de
Tac vu quan frong fIop fhoo doI voI chung fa Ia fhom mof phan fu moI vao cay
nhj phan fm kIom sao cho cac khoa frong cay van gIu dung fhu fu; co nghIa Ia,
cay kof qua van fhoa djnh nghIa cua mof cay nhj phan fm kIom. ac fa fac vu
nay nhu sau:

Er r or _code Sear ch_t r ee<Recor d>: : insert( const Recor d &new_data) ;
post: Nou ban ghI co khoa frung voI khoa cua new_dat a da co frong cay fh Sear ch_t r ee fra vo
dupl i cat e_er r or . Nguoc IaI, new_dat a duoc fhom vao cay sao cho cay van gIu duoc cac
dac fnh cua mof cay nhj phan fm kIom, phuong fhuc fra vo success.
9.3.3.2. Cuc vI du
Truoc khI vIof phuong fhuc nay, chung fa hay xom mof vaI v du. Hnh 9.10
mInh hoa nhung g xay ra khI chung fa fhom cac khoa o, b, d, f, a, g, c vao mof
cay rong fhoo dung fhu fu nay.

KhI phan fu dau fIon o duoc fhom vao, no fro fhanh goc cua cay nhu hnh
9.10a. KhI fhom b, do b nho hon o, b duoc fhom vao cay con bon fraI cua o nhu
hnh |b). TIop fhoo, chung fa fhom d, do d nho hon o, chung fa dI qua fraI, so
sanh d voI b, chung fa dI qua phaI. KhI fhom f, chung fa qua phaI cua o nhu hnh
|d). o fhom a, chung fa qua fraI cua o, roI qua fraI cua b, do a Ia khoa nho nhaf
frong cac khoa can fhom vao. Tuong fu, khoa g Ia khoa Ion nhaf frong cac khoa
can fhom, chung fa dI sang phaI IIon fuc frong khI con co fho, nhu hnh |f). CuoI
cung, vIoc fhom c, so sanh voI o, ro sang fraI, so sanh voI b, ro phaI, va so sanh
voI d, ro fraI. Chung fa co duoc cay o hnh |g).
Chng 9 Cay nh phan
Giao trnh Cau truc D lieu va Giai thuat 204
Hoan foan co fho co mof fhu fu fhom vao khac cung fao ra mof cay nhj phan
fm kIom fuong fu. Chang han, cay o hnh 9.10 co fho duoc fao ra khI cac khoa
duoc fhom fhoo fhu fu o, f, g, b, a, d, c hoac o, b, d, c, a, f, g hoac mof so fhu fu
khac.

Co mof fruong hop fhaf dac bIof. CIa su cac khoa duoc fhom vao mof cay rong
fhoo dung fhu fu fu nhIon a, b, ..., g, fh cay nhj phan fm kIom duoc fao ra so Ia
mof chuoI cac mac xch, nhu hnh 9.9o. ChuoI mac xch nhu vay raf kom hIou qua
doI voI vIoc fm kIom. Chung fa co kof Iuan sau:

Ncu cac kboa Juoc tbcm oao mot cay nbj pban tm kicm rong tbco tbu tu tu
nbicn cua cbung, tb pbuong tbuc insert sc sinb ra mot cay suy tboai oc mot
cbuoi mac xicb kcm bicu qua. Pbuong tbuc insert kbong ncn Jung ooi cac kboa
Ja co tbu tu.

Kof qua fron cung dung frong fruong hop cac khoa co fhu fu nguoc hoac gan
nhu co fhu fu.


HInh 9.10 Thom phan fu vao cay nhj phan fm kIom
Chng 9 Cay nh phan
Giao trnh Cau truc D lieu va Giai thuat 205
9.3.3.3. Phuong phup
Tu v du fron don phuong fhuc i nser t fong quaf cua chung fa chI co mof buoc
nho.

Trong fruong hop fhu nhaf, fhom mof nuf vao mof cay rong raf do. Chung fa
chI can cho con fro r oot chI don nuf nay. Nou cay khong rong, chung fa can so
sanh khoa cua nuf can fhom voI khoa cua nuf goc. Nou nho hon, nuf moI can
fhom vao cay con fraI, nou Ion hon, nuf moI can fhom vao cay con phaI. Nou haI
khoa bang nhau fh phuong fhuc fra vo dupl i cat e_er r or .

Iuu y rang chung fa vua mo fa vIoc fhom vao bang cach su dung do quy. Sau
khI chung fa so sanh khoa, chung fa so fhom nuf moI vao cho cay con fraI hoac
cay con phaI fhoo dung phuong phap ma chung fa su dung cho nuf goc.
9.3.3.4. Hum de quy
CIo chung fa da co fho vIof phuong fhuc i nser t , phuong fhuc nay so goI ham
do quy phu fro voI fhong so r oot .

t empl at e <cl ass Recor d>
Er r or _code Sear ch_t r ee<Recor d>: : insert( const Recor d &new_dat a)
{
r et ur n search_and_insert( root, new_dat a) ;
}

Iuu y rang ham phu fro can fhay doI sub_r oot , do Ia fruong hop vIoc fhom
nuf moI fhanh cong. o do, fhong so sub_r oot phaI Ia fham chIou.

t empl at e <cl ass Recor d>
Er r or _code Sear ch_t r ee<Recor d>: : search_and_insert(
Bi nar y_node<Recor d> *&sub_r oot , const Recor d &new_dat a)
{
i f ( sub_r oot == NULL) {
sub_r oot = new Bi nar y_node<Recor d>( new_dat a) ;
r et ur n success;
}
el se i f ( new_dat a < sub_r oot - >dat a)
r et ur n search_and_insert( sub_r oot - >l ef t , new_dat a) ;
el se i f ( new_dat a > sub_r oot - >dat a)
r et ur n search_and_insert( sub_r oot - >r i ght , new_dat a) ;
el se r et ur n dupl i cat e_er r or ;
}

Chung fa da quy uoc cay nhj phan fm kIom so khong co haI phan fu frung
khoa, do do ham sear ch_and_i nser t fu choI moI phan fu co frung khoa.

Su su dung do quy frong phuong fhuc i nser t fhaf ra khong phaI Ia ban chaf,
v day Ia do quy duoI. Cach hIon fhuc khong do quy duoc xom nhu baI fap.
Chng 9 Cay nh phan
Giao trnh Cau truc D lieu va Giai thuat 206
Xof vo fnh hIou qua, i nser t cung fhuc hIon cung mof so Ian so sanh cac khoa
nhu t r ee_sear ch da Iam khI fm mof khoa da fhom vao fruoc do. Phuong fhuc
i nser t con Iam fhom mof vIoc Ia fhay doI mof con fro, nhung khong ho fhuc
hIon vIoc dI chuyon cac phan fu hoac baf cu vIoc g khac chIom nhIou fhoI gIan.
V fho, hIou qua cua i nser t cung gIong nhu t r ee_sear ch:

Phuong fhuc i nser t co fho fhom mof nuf moI vao mof cay nhj phan fm
kIom ngau nhIon co n nuf frong O|Iog n) buoc. Co fho xay ra, nhung cuc ky hIom,
mof cay ngau nhIon fro non suy fhoaI va Iam cho vIoc fhom vao can don n buoc.
Nou cac khoa duoc fhom vao mof cay rong ma da co fhu fu fh fruong hop suy
fhoaI nay so xay ra.

9.3.4. Sup thu tu theo cuy
KhI duyof mof cay nhj phan fm kIom fhoo inorJcr chung fa so co duoc cac
khoa fhoo dung fhu fu cua chung. Iy do Ia v faf ca cac khoa bon fraI cua mof
khoa dou nho hon chnh no, va cac khoa bon phaI cua no dou Ion hon no. ang do
quy, dIou nay cung fIop fuc dung voI cac cay con cho don khI cay con chI con Ia
mof nuf. Vay phop duyof inorJcr Iuon cho cac khoa co fhu fu.
9.3.4.1. Thu tuc sup thu tu
Iou quan saf duoc fron Ia co so cho mof fhu fuc sap fhu fu fhu vj duoc goI Ia
trccsort. Chung fa chI can dung phuong fhuc i nser t do xay dung mof cay nhj
phan fm kIom fu cac phan fu can sap fhu fu, sau do dung phop duyof inorJcr
chung fa so co cac phan fu co fhu fu.
9.3.4.2. So sunh vo quicksort
Chung fa so xom fhu so Ian so sanh khoa cua trccsort Ia bao nhIou. Nuf dau
fIon Ia goc cua cay, khong can phaI so sanh khoa. VoI haI nuf fIop fhoo, khoa cua
chung fruoc fIon can so sanh voI khoa cua goc do sau do ro fraI hoac phaI.
Quicksort cung fuong fu, frong do, o buoc fhu nhaf moI khoa can so sanh voI
phan fu pioot do duoc daf vao danh sach con bon fraI hoac bon phaI. Trong
trccsort, khI moI nuf duoc fhom, no so dan dI foI vj fr cuoI cung cua no frong cau
fruc IIon kof. KhI nuf fhu haI fro fhanh nuf goc cua cay con fraI hoac cay con
phaI, moI nuf fhuoc mof frong haI cay con nay so duoc so sanh voI nuf goc cua no.
Tuong fu, frong quicksort moI khoa frong mof danh sach con duoc so sanh voI
phan fu pioot cua no. TIop fuc fhoo cach fuong fu, chung fa co duoc nhan xof sau:

Trccsort co cung so /an so sanb cac kboa ooi quicksort.

Nhu chung fa da bIof, quicksort Ia mof phuong phap raf fof. Xof frung bnh,
frong cac phuong phap ma chung fa da hoc, chI co mcrgcsort Ia co so Ian so sanh
Chng 9 Cay nh phan
Giao trnh Cau truc D lieu va Giai thuat 207
cac khoa f nhaf. o do chung fa co fho hy vong rang trccsort cung Ia mof phuong
phap fof nou xof vo so Ian so sanh khoa. Tu phan 8.8.4 chung fa co fho kof Iuan:

Trong fruong hop frung bnh, frong mof danh sach co fhu fu ngau nhIon co n
phan fu, trccsort fhuc hIon

2n In n + O|n) 1.39 Ig n + O|n)

so Ian so sanh.

Trccsort con co mof uu dIom so voI quicksort. Quicksort can fruy xuaf moI
phan fu frong suof qua frnh sap fhu fu. VoI trccsort, khI baf dau qua frnh, cac
phan fu khong can phaI co san mof Iuc, ma chung duoc fhom vao cay fung phan
fu mof. o do trccsort fhch hop voI cac ung dung ma frong do cac phan fu duoc
nhan vao moI Iuc mof phan fu. u dem lon cuu treesort lu cuy nh{ phun tIm
kem vuu cho phep them houc lou phun tu d suu do, vuu cho phep tIm
kem theo tho gun logarit. Trong khI faf ca cac phuong phap sap fhu fu fruoc
kIa cua chung fa, voI hIon fhuc danh sach IIon fuc fh vIoc fhom hoac IoaI phan fu
raf kho, con voI danh sach IIon kof, fh vIoc fm kIom chI co fho Ia fuan fu.

Nhuoc dIom chnh cua trccsort duoc xom xof nhu sau. Chung fa bIof rang
quicksort co hIou qua raf fhap frong fruong hop xau nhaf cua no, nhung nou phan
fu pioot duoc chon fof fh fruong hop nay cung raf hIom khI xay ra. KhI chung fa
chon phan fu dau cua moI danh sach con Iam pioot, fruong hop xau nhaf Ia khI
cac khoa da co fhu fu. Tuong fu, nou cac khoa da co fhu fu fh trccsort so fro non
raf do, cay fm kIom so suy fhoaI vo mof chuoI cac mac xch. Trccsort khong bao
gIo non dung voI cac khoa da co fhu fu, hoac gan nhu co fhu fu.

9.3.5. Lou phun tu trong cuy nh{ phun tIm kem
KhI xom xof vo trccsort, chung fa da nhac don kha nang fhay doI frong cay
nhj phan fm kIom Ia mof uu dIom. Chung fa cung da co mof gIaI fhuaf fhom mof
nuf vao mof cay nhj phan fm kIom, va no co fho duoc su dung cho ca fruong hop
cap nhaf IaI cay cung nhu fruong hop xay dung cay fu dau. Nhung chung fa chua
do cap don cach IoaI mof phan fu ra khoI cay. Nou nuf can IoaI Ia mof nuf Ia, fh
cong vIoc raf do: chI can sua fham chIou don nuf can IoaI fhanh NULL |sau khI da
gIaI phong nuf do). Cong vIoc cung van do dang khI nuf can IoaI chI co mof cay
con khac rong: fham chIou fu nuf cha cua nuf can IoaI duoc chI don cay con khac
rong do.

KhI nuf can IoaI co don haI cay con khac rong, van do fro non phuc fap hon
nhIou. Cay con nao so duoc fham chIou fu nuf cha7 oI voI cay con con IaI can
phaI Iam nhu fho nao7 Hnh 9.11 mInh hoa fruong hop nay. Truoc fIon, chung fa
Chng 9 Cay nh phan
Giao trnh Cau truc D lieu va Giai thuat 208
can fm nuf ngay ko fruoc nuf can IoaI frong phop duyof inorJcr |con goI Ia nuf
cuc phaI cua cay con fraI) bang cach dI xuong nuf con fraI cua no va sau do dI vo
bon phaI IIon fIop nhIou Ian cho don khI khong fho dI duoc nua. Nuf cuc phaI cua
cay con fraI nay so khong co nuf con bon phaI, cho non no co fho duoc IoaI dI mof
cach do dang. Nhu vay du IIou cua nuf can IoaI so duoc chop do boI du IIou cua nuf
nay, va nuf nay so duoc IoaI dI. ang cach nay cay van con gIu duoc dac fnh cua
cay nhj phan fm kIom, do gIua nuf can IoaI va nuf ngay ko fruoc no frong phop
duyof inorJcr khong con nuf nao khac, va fhu fu duyof inorJcr van khong bj xao
fron. |Cung co fho Iam fuong fu khI chon do IoaI nuf ngay ko sau cua nuf can IoaI
- nuf cuc fraI cua cay con phaI - sau khI chop du IIou cua nuf nay Ion du IIou cua
nuf can IoaI).


Chung fa baf dau bang mof ham phu fro so IoaI dI mof nuf nao do frong cay
nhj phan fm kIom. Ham nay co fhong so Ia dja chI cua nuf can IoaI. Thong so nay
phaI Ia fham bIon do vIoc fhay doI no Iam fhay doI fhuc su con fro duoc goI Iam fhong so. NgoaI
ra, muc dch cua ham Ia cap nhaf IaI cay non frong chuong frnh goI, fhong so fhuc su phaI Ia mof

HInh 9.11 IoaI mof phan fu ra khoI cay nhj phan fm kIom
Chng 9 Cay nh phan
Giao trnh Cau truc D lieu va Giai thuat 209
frong cac fham chIou don chnh mof nuf cua cay, chu khong phaI chI Ia mof ban sao cua no. NoI
mof cach khac, nou nuf con fraI cua nuf x can bj IoaI fh ham so duoc goI nhu sau

r emove_r oot ( x- >l ef t ) ,

nou chnh r oot can bj IoaI fh ham so goI

r emove_r oot ( r oot ) .

Cach goI sau day khong dung do khI y fhay doI, x- >l ef t khong ho fhay doI:

y = x- >l ef t ; r emove_r oot ( y) ;

Ham phu fro r emove_r oot duoc hIon fhuc nhu sau:

t empl at e <cl ass Recor d>
Er r or _code Sear ch_t r ee<Recor d>: : remove_root( Bi nar y_node<Recor d>
*&sub_r oot )
/ *
pre: sub_r oot Ia NULL, hoac Ia dja chI cua nuf goc cua mof cay con ma nuf goc nay can duoc
IoaI khoI cay nhj phan fm kIom.
post: Nou sub_r oot Ia NULL, ham fra vo not _pr esent . Nguoc IaI, goc cua cay con nay so
duoc IoaI sao cho cay con IaI van Ia cay nhj phan fm kIom. Thong so sub_r oot duoc gan
IaI goc moI cua cay con, ham fra vo success.
*/
{
i f ( sub_r oot == NULL) r et ur n not _pr esent ;
Bi nar y_node<Recor d> *t o_del et e = sub_r oot ; / / Nho IaI nuf can IoaI.
i f ( sub_r oot - >r i ght == NULL)
sub_r oot = sub_r oot - >l ef t ;
el se i f ( sub_r oot - >l ef t == NULL)
sub_r oot = sub_r oot - >r i ght ;
el se { / / Ca 2 cay con dou rong.
t o_del et e = sub_r oot - >l ef t ; / / Vo bon fraI do dI fm nuf dung ngay fruoc nuf can
IoaI frong fhu fu duyof inorJcr..

Bi nar y_node<Recor d> *par ent = sub_r oot ;
whi l e ( t o_del et e- >r i ght ! = NULL) { / / t o_del et e so don duoc nuf
par ent = t o_del et e; / / can fm va par ent so Ia
t o_del et e = t o_del et e- >r i ght ; / / nuf cha cua no.
}
sub_r oot - >dat a = t o_del et e- >dat a; / / Chop do Ion du IIou can IoaI.

i f ( par ent == sub_r oot ) / / Truong hop dac bIof: nuf con
sub_r oot - >l ef t = t o_del et e- >l ef t ; / / fraI cua nuf can IoaI cung
/ / chnh Ia nuf dung ngay fruoc
/ / no frong fhu fu duyof inorJcr.
el se par ent - >r i ght = t o_del et e- >l ef t ;
}
del et e t o_del et e; / / IoaI phan fu cuc phaI cua cay con fraI cua phan fu can IoaI.
r et ur n success;
}

Chng 9 Cay nh phan
Giao trnh Cau truc D lieu va Giai thuat 210
Chung fa can phaI can fhan phan bIof gIua fruong hop nuf ngay fruoc nuf can
IoaI frong fhu fu duyof inorJcr Ia chnh nuf con fraI cua no voI fruong hop chung
fa can phaI dI chuyon vo bon phaI do fm. Truong hop fhu nhaf Ia fruong hop dac
bIof, nuf con fraI cua nuf can IoaI co cay con bon phaI rong. Truong hop fhu haI Ia
fruong hop fong quaf hon, nhung cung can Iuu y Ia chung fa dI fm nuf co cay con
phaI Ia rong chu khong phaI fm mof cay con rong.

Phuong fhuc remove duoI day nhan fhong so Ia du IIou cua nuf can IoaI chu
khong phaI con fro chI don no. o IoaI mof nuf, vIoc dau fIon can Iam Ia dI fm
no frong cay. Chung fa kof hop vIoc fm do quy frong cay voI vIoc IoaI bo nhu sau:

t empl at e <cl ass Recor d>
Er r or _code Sear ch_t r ee<Recor d>: : remove( const Recor d &t ar get )
/ *
post: Nou fm duoc du IIou co khoa frung voI khoa frong t ar get fh du IIou do so bj IoaI khoI
cay sao cho cay van Ia cay nhj phan fm kIom, phuong fhuc fra vo success. Nguoc IaI,
phuong fhuc fra vo not _pr esent .
uses: Ham sear ch_and_dest r oy
*/
{
r et ur n search_and_destroy( r oot , t ar get ) ;
}

Nhu fhuong Io, phuong fhuc fron goI mof ham do quy phu fro co fhong so Ia
con fro r oot .

t empl at e <cl ass Recor d>
Er r or _code Sear ch_t r ee<Recor d>: : search_and_destroy(
Bi nar y_node<Recor d>* &sub_r oot , const Recor d &t ar get )
/ *
pre: sub_r oot Ia NULL hoac Ia dja chI cua goc cua mof cay con cua cay nhj phan fm kIom.
post: Nou khoa frong fargof khong co frong cay con sub_r oot , ham fra vo not _pr esent .
Nguoc IaI, nuf co chua du IIou fm fhay so duoc IoaI sao cho fnh chaf cay nhj phan fm kIom
van duocbao foan, ham fra vo success.
uses: Ham sear ch_and_dest r oy ( mof cach do quy) va ham r emove_r oot .
*/
{
i f ( sub_r oot == NULL | | sub_r oot - >dat a == t ar get )
r et ur n remove_root( sub_r oot ) ;
el se i f ( t ar get < sub_r oot - >dat a)
r et ur n sear ch_and_dest r oy( sub_r oot - >l ef t , t ar get ) ;
el se
r et ur n sear ch_and_dest r oy( sub_r oot - >r i ght , t ar get ) ;
}
9.4. Xuy dung mot cuy nh{ phun tIm kem
CIa su chung fa co mof danh sach cac du IIou da co fhu fu, hoac co fho Ia mof
fIIo cac ban ghI co cac khoa da co fhu fu. Nou chung fa muon su dung cac du IIou
Chng 9 Cay nh phan
Giao trnh Cau truc D lieu va Giai thuat 211
nay do fm kIom fhong fIn, hoac fhuc hIon mof so fhay doI nao do, chung fa co
fho fao mof cay nhj phan fm kIom fu danh sach hoac fIIo nay.

Chung fa co fho baf dau fu mof cay rong va don gIan su dung gIaI fhuaf fhom
vao cay do fhom fung phan fu. Tuy nhIon do cac phan fu da co fhu fu, cay fm
kIom cua chung fa so fro fhanh mof chuoI cac mac xch raf daI, va vIoc su dung
no fro non raf cham chap voI foc do cua fm fuan fu chu khong phaI Ia fm nhj
phan. Thay vao do chung fa mong muon rang cac phan fu so duoc xay dung fhanh
mof cay cang ram rap cang fof, co nghIa Ia cay khong bj cao qua, do gIam fhoI
gIan fao cay cung nhu fhoI gIan fm kIom. Chang han, khI so phan fu n bang 31,
chung fa muon cay so co duoc dang nhu hnh 9.12. ay Ia cay co duoc su can bang
fof nhaf gIua cac nhanh, va duoc goI Ia cay nhj phan day du.

Trong hnh 9.12, cac phan fu duoc danh so fhoo fhu fu ma gIa frj cua chung
fang dan. ay cung Ia fhu fu fu duyof cay inorJcr, va cung Ia fhu fu ma chung so
duoc fhom vao cay fhoo gIaI fhuaf cua chung fa. Chung fa cung so dung cac con so
nay nhu Ia nhan cua cac nuf frong cay. Nou chung fa xom xof ky so do fron,
chung fa co fho nhan fhay mof dac fnh quan frong cua cac nhan. Cac nhan cua
cac nuf Ia chI foan so Io. Cac nhan cua cac nuf o muc fron cac nuf Ia mof bac Ia 2,
6, 10, 14, 18, 22, 26, 30. Cac so nay dou gap doI mof so Io, co nghIa chung dou Ia
so chan, va chung dou khong chIa hof cho 4. Tron muc cao hon mof bac cac nuf co
nhan 4, 12, 20 va 28, day Ia nhung con so chIa hof cho 4, nhung khong chIa hof
cho 8. CuoI cung, cac nuf ngay duoI nuf goc co nhan Ia 8 va 24. va nuf goc co
nhan Ia 16.

Ncu cac nut cua mot cay nbj pban Jay Ju co cac nban tbco tbu tu Juyct
inorJcr, bat Jau tu 1, tb nban cua moi nut /a mot so co so /an cbia cban cbo 2
bang ooi bicu giua muc cua no ooi muc cua cac nut /a.

Nhu vay, nou cho muc cua cac nuf Ia Ia 1, khI fhom mof nuf moI, dua vao nhan
cua no chung fa so fnh duoc muc fuong ung.

HInh 9.12 Cay nhj phan day du voI 31 nuf.
Chng 9 Cay nh phan
Giao trnh Cau truc D lieu va Giai thuat 212
CIa su chung fa khong bIof fruoc so nuf so fao cay. Iou nay duoc gIaI fhch
rang, khI cac nuf don fu mof fIIo hoac mof danh sach IIon kof, chung fa khong co
cach g fhuan fIon do dom fruoc so nuf ca. Iou gIa fhIof nay cung con mof uu
dIom Ia chung fa khong can phaI Io Iang vo vIoc so nuf co phaI Ia mof so Iuy fhua
cua 2 fru dI 1 hay khong. Trong fruong hop so nuf khong phaI Ia so Iuy fhua cua
2 fru dI 1, cay duoc fao ra so khong phaI Ia mof cay day du va doI xung hoan foan
nhu hnh 9.12. VoI gIa fhIof cay so Ia mof cay day du, chung fa so dua dan cac
nuf vao cay, cho don khI moI phan fu da duoc dua vao cay, chung fa so xac djnh
cach do kof fhuc vIoc fao cay.

9.4.1. Thet ke gu thuut
KhI nhan phan fu fhu nhaf co nhan Ia 1, chung fa so fao mof nuf Ia co cac con
fro Ioff va rIghf dou Ia NULL. Nuf so 2 nam fron nuf 1, nhu hnh 9.13. o nuf 2
nam gIu nuf 1, bang cach nao do chung fa can nho dja chI nuf 1 cho don khI co
nuf 2. Nuf so 3 IaI Ia nuf Ia, nhung no Ia nuf con phaI cua nuf 2, vay chung fa can
nho IaI dja chI nuf 2

Iam nhu vay IIou chung fa co can phaI na m gIu mof danh sach cac con fro don
faf ca cac nuf da duoc dua vao cay, do sau do chung moI duoc gan vao con fro

HInh 9.13 Tao cac nuf dau fIon cho mof cay nhj phan fm kIom
Chng 9 Cay nh phan
Giao trnh Cau truc D lieu va Giai thuat 213
l ef t hoac r i ght cua cha chung khI cha chung xuaf hIon sau hay khong7 Cau fra
IoI Ia khong. o khI nuf 2 duoc fhom vao, moI moI noI voI nuf 1 da hoan faf. Nuf
2 can duoc nho cho don khI nuf 4 duoc fhom vao, do fao IIon kof fraI cua nuf 4.
Tuong fu, nuf 4 can duoc nho cho don khI nuf 8 duoc fhom vao. Trong hnh 9.13,
cac muI fon chI cac nuf can duoc nho IaI khI cay dang Ion Ion.

Chung fa fhay rang do fhuc hIon cac moI noI sau do, doI voI moI muc chung fa
chI can nho IaI duy nhaf mof con fro chI don mof nuf, do chnh Ia nuf cuoI cung
frong muc do. Chung fa nam gIu cac con fro nay frong mof danh sach goI Ia
last_node, va danh sach nay cung so raf nho. Iay v du, mof cay co 20 muc co
fho chua don 2
20
-1 > 1,000,000 nuf, nhung chI can 20 phan fu frong l ast _node.

KhI mof nuf duoc fhom vao, chung fa co fho gan con fro rIghf cua no Ia NULL,
co fho chI Ia fam fhoI, v nuf con phaI cua no |nou co) so duoc fhom vao sau. Con
fro fraI cua mof nuf moI so Ia NULL nou do Ia nuf Ia. Nguoc IaI, nuf con fraI cua
no chnh Ia nuf o ngay muc fhap hon muc cua no ma dja chI dang chua frong
l ast _node. Chung fa cung co fho xu Iy cho cac nuf Ia fuong fu nhu cac nuf khac
bang cach, nou cho muc cua nuf Ia Ia 1, fh chung fa so cho phan fu dau fIon, faI
vj fr 0, cua l ast _node Iuon mang frj NULL. Cac muc bon fron muc cua nuf Ia so
Ia 2, 3, ...
9.4.2. Cuc khu buo vu hum mun
Chung fa co fho djnh nghIa mof Iop moI, goI Ia Buildable_tree, dan xuaf fu
Iop Sear ch_t r ee.

t empl at e <cl ass Recor d>
cl ass Buildable_tree: publ i c Sear ch_t r ee<Recor d> {
publ i c:
Er r or _code build_tree( const Li st <Recor d> &suppl y) ;
pr i vat e: / / Cac ham phu fro.
};

uoc dau fIon cua bui l d_t r ee Ia nhan cac phan fu. o don gIan chung fa so
cho rang cac phan fu nay duoc chua frong mof danh sach cac Recor d goI Ia
supply. Tuy nhIon, chung fa cung co fho vIof IaI ham do nhan cac phan fu fu mof
hang doI, hoac mof fap fIn, hoac fham ch fu mof cay nhj phan fm kIom khac voI
mong muon can bang IaI cay nay.

KhI nhan cac phan fu moI do fhom vao cay, chung fa so cap nhaf IaI mof bIon
count do bIof duoc co bao nhIou phan fu da duoc fhom vao. Ro rang Ia frj cua
count con duoc dung do Iay du IIou fu danh sach suppl y. Quan frong hon nua,
frj cua count con xac djnh muc cua nuf dang duoc fhom vao cay, no so duoc goI
cho mof ham chuyon Io vIoc fnh foan nay.

Chng 9 Cay nh phan
Giao trnh Cau truc D lieu va Giai thuat 214
Sau khI faf ca cac phan fu fu suppl y da duoc fhom vao cay nhj phan fm kIom
moI, chung fa can fm goc cua cay va noI faf ca cac cay con phaI con roI rac.

t empl at e <cl ass Recor d>
Er r or _code Bui l dabl e_t r ee<Recor d>: : build_tree
( const Li st <Recor d>&suppl y)
/ *
post: Nou du IIou frong suppl y co fhu fu fang dan, cay nhj phan fm kIom kha can bang so
duoc fao ra fu cac du IIou nay, phuong fhuc fra vo success. Nguoc IaI, cay nhj phan fm
kIom chI duoc fao ra fu mang cac du IIou fang dan daI nhaf fnh baf dau fu dau danh sach
suppIy, phuong fhuc fra vo f ai l .
uses: Cac phuong fhuc cua Iop Li st va cac ham bui l d_i nser t , connect _subt r ees, va
f i nd_r oot
*/
{ Er r or _code or der ed_dat a = success; / / So duoc gan IaI Ia f ai l nou du IIou
khong fang dan.
i nt count = 0;
Recor d x, l ast _x;
Li st <Bi nar y_node<Recor d> *> l ast _node; / / ChI don cac nuf cuoI cung cua moI muc
frong cay.
Bi nar y_node<Recor d> *none = NULL;
l ast _node. i nser t ( 0, none) ; / / Iuon Ia NULL ( danh cho cac nuf Ia frong cay) .
whi l e ( suppl y. r et r i eve( count , x) == success) {
i f ( count > 0 && x <= l ast _x) {
or der ed_dat a = fail;
br eak;
}
build_insert( ++count , x, l ast _node) ;
l ast _x = x;
}
r oot = f i nd_r oot ( l ast _node) ;
connect _t r ees( l ast _node) ;
r et ur n or der ed_dat a;
}

9.4.3. Them mot nut
Phan fron da xom xof cach noI cac IIon kof fraI cua cac nuf, nhung frong qua
frnh xay dung cay, cac IIon kof phaI cua cac nuf co Iuc van con Ia NULL va chung
can duoc fhay doI sau do. KhI mof nuf moI duoc fhom vao, no co fho so co mof cay
con phaI khong rong. o no Ia nuf moI nhaf va Ion nhaf duoc dua vao cay cho
don fhoI dIom hIon faI, cac nuf frong cay con phaI cua no chua co. Nguoc IaI, mof
nuf moI duoc fhom cung co fho Ia nuf con phaI cua mof nuf nao do da duoc dua
vao fruoc. ong fhoI, no co fho Ia con fraI cua mof nuf co khoa Ion hon, frong
fruong hop nay fh nuf cha cua no chua co. Chung fa co fho xac djnh fung fruong
hop dang xay ra nho vao danh sach l ast _node. Nou muc level cua mof nuf
dang duoc fhom vao Ion hon hoac bang 1, fh nuf cha cua no co muc level+1.
Chung fa fm phan fu fhu l evel +1 frong l ast _node. Nou con fro r i ght cua nuf
nay van con Ia NULL fh nuf dang duoc fhom moI chnh Ia nuf con phaI cua no.
Chng 9 Cay nh phan
Giao trnh Cau truc D lieu va Giai thuat 215
Nguoc IaI, nou no da co con phaI fh nuf dang duoc fhom moI phaI Ia con fraI cua
mof nuf nao do so duoc fhom vao sau. Xom hnh 9.1.

Chung fa co fho vIof ham fhom mof nuf moI vao cay nhu sau:

t empl at e <cl ass Recor d>
voi d Bui l dabl e_t r ee<Recor d>: : build_insert( i nt count ,
const Recor d &new_dat a,
Li st <Bi nar y_node<Recor d>*> &l ast _node)
/ *
post: Mof nuf moI chua new_dat a duoc fhom vao cay. Muc cua nuf nay bang so Ian count chIa
chan cho 2 cong fhom 1, nou xom muc cua nuf Ia bang 1.
uses: Cac phuong fhuc cua Iop Li st .
*/
{
i nt l evel ;
f or ( l evel = 1; count %2 == 0; l evel ++)
count / = 2; / / Su dung count do fnh muc cua nuf ko.
Bi nar y_node<Recor d> *next _node = new Bi nar y_node<Recor d>( new_dat a) ,
*par ent ;
l ast _node. r et r i eve( l evel - 1, next_node->left) ; / / Nuf moI duoc fao ra
/ / nhan con fraI chnh Ia nuf co dja chI dang duoc Iuu
/ / frong l ast _node faI phan fu fuong ung voI muc
/ / ngay duoI muc cua nuf moI.
i f ( l ast _node. si ze( ) <= l evel )
l ast _node. i nser t ( l evel , next _node) ; / / Nuf moI Ia nuf dau fIon xuaf hIon
/ / frong muc cua no.
el se
l ast _node. r epl ace( l evel , next _node) ; / / a co nhIou nuf cung muc va nuf
/ / moI nay chnh Ia nuf xuaf hIon
/ / moI nhaf frong cac nuf cung muc
/ / non can Iuu IaI dja chI.
i f ( l ast _node. r et r i eve( l evel + 1, par ent ) ==success
&& par ent - >r i ght ==NULL)
/ / ay Ia fruong hop nuf cha cua
/ / nuf moI da fon faI va nuf cha nay
/ / so nhan no Iam con phaI.
par ent - >r i ght = next _node;
}

9.4.4. Houn tut cong vec
Tm goc cua cay vua duoc fao Ia mof vIoc do dang: goc chnh Ia nuf o muc cao
nhaf frong cay, con fro chI don no chnh Ia phan fu cuoI cung frong danh sach
l ast _node. Cay co 21 nuf nhu hnh 9.13 co nuf cao nhaf Ia nuf 16 o muc 5, do
chnh goc cua cay. Cac con fro don cac nuf cuoI cua moI muc duoc chua frong
l ast _node nhu hnh vo 9.14.



Chng 9 Cay nh phan
Giao trnh Cau truc D lieu va Giai thuat 216
Chung fa co ham nhu sau:

t empl at e <cl ass Recor d>
Bi nar y_node<Recor d> *Bui l dabl e_t r ee<Recor d>: : find_root
( Li st <Bi nar y_node<Recor d>*> &l ast _node)
/ *
pre: anh sach l ast _node chua dja chI cac nuf cuoI cung cua moI muc frong cay nhj phan fm
kIom.
post: Tra vo dja chI nuf goc cua cay nhj phan fm kIom da duoc fao ra.
uses: Cac phuong fhuc cua Iop Li st .
*/
{
Bi nar y_node<Recor d> *hi gh_node;
l ast _node. r et r i eve( last_node.size() - 1, hi gh_node) ;
/ / Tm dja chI nuf goc cua cay faI phan fu fuong ung voI muc cao nhaf frong cay.
r et ur n hi gh_node;
}

CuoI cung, chung fa can xac djnh cach noI cac cay con con nam ngoaI. Chang
han, voI cay co n = 21, chung fa can noI ba fhanh phan o hnh 9.13 vao mof cay
duy nhaf. Thoo hnh vo chung fa fhay rang mof so nuf frong cac phan fron cua
cay co fho van con con fro rIghf Ia NULL, frong khI cac nuf da fhom vao cay bay
gIo phaI fro fhanh nuf con phaI cua chung.

af ky nuf nao frong so cac nuf co con fro rIghf van con Ia NULL, fru nuf Ia,
dou Ia mof frong cac nuf nam frong l ast _node. VoI n=21, do Ia cac nuf 16 va 20
faI cac vj fr 5 va 3 fuong ung frong l ast _node frong hnh 9.14.
Trong ham sau day chung fa dung con fro high_node do chI don cac nuf co
con fro rIghf Ia NULL. Chung fa can xac djnh con fro lower_node chI don nuf con
phaI cua high_node. Con fro l ower _node co fho duoc xac djnh boI nuf cao nhaf
frong l ast _node ma khong phaI Ia nuf con fraI cua hi gh_node. o xac djnh mof

HInh 9.14 Hoan faf cay nhj phan fm kIom.
Chng 9 Cay nh phan
Giao trnh Cau truc D lieu va Giai thuat 217
nuf co phaI Ia con fraI cua hi gh_node hay khong chung fa so sanh khoa cua no
voI khoa cua hi gh_node.
t empl at e <cl ass Recor d>
voi d Bui l dabl e_t r ee<Recor d>: : connect_trees
( const Li st <Bi nar y_node<Recor d>*> &l ast _node)
/ *
pre: anh sach l ast _node chua dja chI cac nuf cuoI cung cua moI muc frong cay nhj phan fm
kIom. Cay nhj phan fm kIom duoc da duoc fao gan hoan chInh.
post: Cac IIon kof cuoI cung frong cay duoc noI IaI.
uses: Cac phuong fhuc cua Iop Li st .
*/
{ Bi nar y_node<Recor d> *hi gh_node, / / f r oml ast _node wi t h NULL r i ght chi l d
*l ow_node; / / candi dat e f or r i ght chi l d of hi gh_node
i nt hi gh_l evel = l ast _node. si ze( ) - 1,
l ow_l evel ;
whi l e ( hi gh_l evel > 2) { / / Nodes on l evel s 1 and 2 ar e al r eady OK.
l ast _node. r et r i eve( hi gh_l evel , hi gh_node) ;
i f ( hi gh_node- >r i ght ! = NULL)
hi gh_l evel - - ; / / Sear ch down f or hi ghest dangl i ng node.
el se { / / Case: undef i ned r i ght t r ee
l ow_l evel = hi gh_l evel ;
do { / / Fi nd t he hi ghest ent r y not i n t he l ef t
subt r ee.
l ast _node. r et r i eve( - - l ow_l evel , l ow_node) ;
}whi l e ( l ow_node ! = NULL && l ow_node- >dat a < hi gh_node- >dat a) ;
hi gh_node- >r i ght = l ow_node;
hi gh_l evel = l ow_l evel ;
}
}
}
9.4.5. Ounh gu
Cay nhj phan fm kIom do gIaI fhuaf fron day fao ra khong Iuon Ia mof cay
can bang fof nhaf. Nhu chung fa fhay, hnh 9.14 Ia cay co n = 21 nuf. Nou no co
31 nuf, no moI co su can bang fof nhaf. Nou nuf fhu 32 duoc fhom vao fh no so
fro fhanh goc cua cay, va faf ca 31 nuf da co so fhuoc cay con fraI cua no. Trong
fruong hop nay, cac nuf Ia nam cach nuf goc 5 buoc fm kIom. Nhu vay cay co 32
nuf fhuong so phaI can so Ian so sanh nhIou hon so Ian so sanh can fhIof Ia mof.
VoI cay co 32 nuf, nou nuf goc duoc chon mof cach foI uu, fh da so cac nuf Ia can
4 buoc fm kIom fu nuf goc, chI co mof nuf Ia Ia can 5 buoc.

Mof Ian so sanh doI ra frong fm nhj phan khong phaI Ia mof su fra gIa cao,
va ro rang rang cay duoc fao ra boI phuong phap fron day cua chung fa so khong
bao gIo co so muc nhIou hon so muc foI uu qua mof don vj. Con co nhIou phuong
phap phuc fap hon do fao ra mof cay nhj phan fm kIom daf duoc su can bang cao
nhaf co fho, nhung mof phuong phap don gIan nhu fron day cung raf can fhIof,
dac bIof Ia phuong phap nay khong cun bet truoc so nut se duoc them vuo
cuy.

Chng 9 Cay nh phan
Giao trnh Cau truc D lieu va Giai thuat 218
Trong phan 9.5 chung fa so fm hIou vo cay AVI, frong do vIoc fhom hay IoaI
phan fu Iuon bao dam cay van gan voI frang fhaI can bang. Tuy nhIon, doI voI
nhIou ung dung, gIaI fhuaf don gIan ma chung fa mo fa o day da Ia fhch hop.
9.5. Cun bung cheu cuo: Cuy AVL

CIaI fhuaf frong phan 9.4 co fho duoc su dung do xay dung mof cay nhj phan
fm kIom gan nhu can bang, hoac do khoI phuc su can bang. Tuy nhIon, frong
nhIou ung dung, vIoc fhom va IoaI phan fu frong cay xay ra fhuong xuyon, va voI
mof fhu fu khong bIof fruoc. Trong mof vaI ung dung IoaI nay, dIou quan frong
can co Ia foI uu fhoI gIan fm kIom bang cach Iuon duy fr cay gan voI fnh frang
can bang. Tu nam 1962 haI nha foan hoc nguoI Nga, C. M. AdoISon-VoISkII va
. M. IandIs, da mo fa mof phuong phap nham dap ung you cau nay, va cay nhj
phan fm kIom nay duoc goI Ia cay AVI.

Cay AVI daf duoc muc dch Ia vIoc fm kIom, fhom vao, IoaI bo phan fu frong
mof cay n nuf co duoc fhoI gIan Ia O|Iog n), ngay ca frong fruong hop xau nhaf.
ChIou cao cua cay AVI n nuf, ma chung fa so xom xof sau, so khong bao gIo vuof
qua 1.44Ig n, va nhu vay ngay ca frong fruong hop xau nhaf, cac hanh vI frong
cay AVI cung khong fho cham hon mof cay nhj phan fm kIom ngau nhIon. Tuy
nhIon, frong phan Ion cac fruong hop, fhoI gIan fm kIom fhaf su fhuong raf gan
voI Ig n, va nhu vay hanh vI cua cac cay AVI raf gan voI hanh vI cua mof cay nhj
phan fm kIom can bang hoan foan Iy fuong.

9.5.1. O{nh nghIu
Trong mof cay can bang hoan foan, cac cay con fraI va cay con phaI cua baf ky
mof nuf nao cung phaI co cung chIou cao. Mac du chung fa khong fho Iuon Iuon
daf duoc dIou nay, nhung bang cach xay dung cay nhj phan fm kIom mof cach
can fhan, chung fa Iuon co fho bao dam rang chIou cao cua cay con fraI va chIou
cao cua cay con phaI cua baf ky mof nuf nao dou hon kom nhau khong qua 1.
Chung fa co djnh nghIa sau:

jnb ngba: Cay AVI Ia mof cay nhj phan fm kIom frong do chIou cao cay con
fraI va chIou cao cay con phaI cua nuf goc hon kom nhau khong qua 1, va ca haI
cay con fraI va phaI nay dou Ia cay AVI.

MoI nuf cua cay AVI co fhom mof fhong so can bang mang frj l ef t - hi gher ,
equal - hei ght , hoac r i ght - hi gher fuong ung fruong hop cay con fraI cao
hon, bang, hoac fhap hon cay con phaI.

Chng 9 Cay nh phan
Giao trnh Cau truc D lieu va Giai thuat 219
Trong so do, chung fa dung / do chI nuf co cay con fraI cao hon cay con phaI,
- chI nuf can bang co haI cay con cao bang nhau, va ` chI nuf co cay con phaI
cao hon cay con fraI. Hnh 9.15 mInh hoa mof vaI cay AVI nho va mof so cay nhj
phan khong fhoa djnh nghIa cay AVI.
Iuu y rang, djnh nghIa khong you cau moI nuf Ia co cung muc hoac phaI o cac
muc ko nhau. Hnh 9.16 mInh hoa mof vaI cay AVI raf khong doI xung, voI cac
cay con fraI cao hon cac cay con phaI.


Chung fa dung kIou IIof ko do khaI bao fhong so can bang:

enumBalance_factor {l ef t _hi gher , equal _hei ght , r i ght _hi gher };
HInh 9.15 - Cac v du vo cay AVI va cac cay nhj phan khac.

HInh 9.16 Mof so cay AVI khong doI xung voI cay con fraI cao hon cay con phaI.
Chng 9 Cay nh phan
Giao trnh Cau truc D lieu va Giai thuat 220
Thong so can bang phaI co frong faf ca cac nuf cua cay AVI, chung fa can bo
sung dac fa mof node nhu sau:
t empl at e <cl ass Recor d>
st r uct AVL_node: publ i c Bi nar y_node<Recor d> {
Bal ance_f act or balance;
/ / const r uct or s:
AVL_node( ) ;
AVL_node( const Recor d &x) ;
/ / Cac ham ao duoc djnh nghIa IaI:
voi d set _bal ance( Bal ance_f act or b) ;
Bal ance_f act or get _bal ance( ) const ;
};

Mof dIom can Iuu y frong dac fa nay Ia cac con fro l ef t va r i ght cua Bi nar y_node co kIou
Bi nar y_node`. o do cac con fro ma AVL_node fhua ko cung co kIou nay. Tuy nhIon, frong mof
cay AVI, ro rang Ia chung fa can cac nuf cua cay AVI fham chIou don cac nuf khac cua cay AVI.
Su khong fuong fhch vo kIou cua con fro nay khong phaI Ia mof van do nghIom frong, v mof con
fro don mof doI fuong cua mof Iop co so cung co fho chI don mof doI fuong cua Iop dan xuaf.
Trong fruong hop cua chung fa, cac con fro Ioff va rIgfh cua mof AVL_node co fho chI don cac
AVL_node khac mof cach hop Io. IoI ch cua vIoc hIon fhuc AVL_node fhua ko fu Bi nar y_node Ia
su su dung IaI faf ca cac phuong fhuc cua cay nhj phan va cay fm kIom. Tuy nhIon, chung fa can
bao dam rang khI fhom mof nuf moI vao cay AVI, chung fa chI fhom dung cac nuf AVI ma fhoI.

Chung fa so su dung cac phuong fhuc get _bal ance va set _bal ance do xac
djnh fhong so can bang cua AVL_node.
t empl at e <cl ass Recor d>
voi d AVL_node<Recor d>: : set_balance( Bal ance_f act or b)
{
bal ance = b;
}

t empl at e <cl ass Recor d>
Bal ance_f act or AVL_node<Recor d>: : get_balance( ) const
{
r et ur n bal ance;
}

Chung fa so goI haI phuong fhuc nay fhong qua con fro chI don nuf cua cay, chang han l ef t -
>get _bal ance( ) . Tuy nhIon, cach goI nay co fho gap van do doI voI frnh bIon djch C++ do Ioff
Ia con fro chI don mof Bi nar y_node chu khong phaI AVL_node. Trnh bIon djch phaI fu choI
bIou fhuc l ef t - >get _bal ance( ) do no khong chac rang do co Ia phuong fhuc cua doI fuong
*l ef t hay khong. Chung fa gIaI quyof van do nay bang cach fhom vao cac phIon ban gIa |Jummy
ocrsion) cua cac phuong fhuc get _bal ance( ) va set _bal ance( ) cho cau fruc Bi nar y_node. Cac
phuong fhuc gIa duoc fhom vao nay chI do danh cho cac hIon fhuc cua cay AVI dan xuaf.

Sau khI chung fa bo sung cac phuong fhuc gIa cho cau fruc Bi nar y_node, frnh bIon djch so
chap nhan bIou fhuc l ef t - >set _bal ance( ) . Tuy nhIon, van con mof van do ma frnh bIon djch
van khong fho gIaI quyof duoc: no non su dung phuong fhuc cua AVL_node hay phuong fhuc gIa7
Su Iua chon dung chI co fho duoc fhuc hIon frong fhoI gIan chay cua chuong frnh, khI kIou cua
*l ef t da duoc bIof. Mof cach fuong ung, chung fa phaI khaI bao cac phIon ban set _bal ance va
get _bal ance cua Bi nar y_node Ia cac phuong fhuc ao |oirtua/). Iou nay co nghIa Ia su Iua chon
phIon ban nao so duoc fhuc hIon frong fhoI gIan chay cua chuong frnh. Chang han, nou
Chng 9 Cay nh phan
Giao trnh Cau truc D lieu va Giai thuat 221
set _bal ance( ) duoc goI nhu mof phuong fhuc cua AVL_node, fh phIon ban cua AVI so duoc su
dung, nou no duoc goI nhu mof phuong fhuc cua Bi nar y_node fh phIon ban gIa so duoc su dung.

uoI day Ia dac fa cua Bi nar y_node da duoc sua doI:
t empl at e <cl ass Ent r y>
st r uct Binary_node {
/ / dat a member s:
Ent r y dat a;
Bi nar y_node<Ent r y> *l ef t ;
Bi nar y_node<Ent r y> *r i ght ;
/ / const r uct or s:
Bi nar y_node( ) ;
Bi nar y_node( const Ent r y &x) ;
/ / vi r t ual met hods:
virtual voi d set_balance( Bal ance_f act or b) ;
virtual Bal ance_f act or get_balance( ) const ;
};

t empl at e <cl ass Ent r y>
voi d Bi nar y_node<Ent r y>: : set _bal ance( Bal ance_f act or b)
{
}

t empl at e <cl ass Ent r y>
Bal ance_f act or Bi nar y_node<Ent r y>: : get _bal ance( ) const
{
r et ur n equal _hei ght ;
}

NgoaI ra khong co su fhay doI nao khac frong cac Iop va cac phuong fhuc cua
chung fa, va moI ham xu Iy cho cac nuf fruoc kIa cua chung fa bay gIo da co fho
su dung cho cac nuf AVI.

ay gIo chung fa da co fho dac fa Iop cho cay AVI. Chung fa chI can djnh
nghIa IaI cac phuong fhuc fhom va IoaI phan fu do co fho duy fr cau fruc cay can
bang. Cac phuong fhuc khac cua cay nhj phan fm kIom dou co fho duoc fhua ko
ma khong can fhay doI g.

t empl at e <cl ass Recor d>
cl ass AVL_tree: publ i c Sear ch_t r ee<Recor d> {
publ i c:
Er r or _code insert( const Recor d &new_dat a) ;
Er r or _code remove( const Recor d &ol d_dat a) ;
pr i vat e: / / Cac ham phu fro.
};
Thuoc tnh d lieu lp nay tha ke c la con tro root. Con tro nay co kieu
Bi nar y_node<Recor d>* va do o, nh chung ta a thay, no co the cha a ch cua mot
nut cua cay nh phan nguyen thuy hoac a ch cua mot nut cua cay AVL. Chung ta phai bao
am rang phng thc i nser t c nh ngha lai ch tao ra cac nut co kieu AVL_node,
lam nh vay mi bao am rang moi nut c truy xuat thong qua con tro r oot cua cay AVL
eu la cac nut AVL.
Chng 9 Cay nh phan
Giao trnh Cau truc D lieu va Giai thuat 222
9.5.2. Them mot nut
9.5.2.1. Oun nhup
Chung fa hay fhoo doI su Ion Ion cua cay AVI frong hnh 9.17 qua vIoc fhom
mof so phan fu.


Qua frnh fhom o hnh 9.17 duoc fIon hanh chnh xac fhoo cung mof cach voI
qua frnh fhom vao cay nhj phan fm kIom fhong fhuong, ngoaI fru vIoc cap nhaf
IaI fhong so can bang. Tuy nhIon, chung fa Iuu y rang cac fhong so can bang chI
co fho duoc xac djnh sau khI vIoc fhom vao da duoc fhuc hIon. KhI v duoc fhom
vao fhoo hnh 9.17, fhong so can bang frong goc k fhay doI, nhung no khong fhay
doI khI p duoc fhom ko sau do. Ca v va p dou duoc fhom vao cay con phaI f cua
nuf goc, va chI sau khI vIoc fhom vao hoan faf, fhong so can bang faI nuf goc k
moI co fho duoc xac djnh.

Chung fa co fho fhom mof nuf moI vao mof cay AVI bang cach nhu sau. Truoc
hof fhoo dung gIaI fhuaf fhom vao mof cay nhj phan fm kIom bnh fhuong : so
sanh khoa cua nuf moI voI khoa cua nuf goc, va fhom nuf moI vao cay con fraI
hoac cay con phaI fhch hop.


HInh 9.1? Thom nuf vao cay AVI: cac fruong hop don gIan
Chng 9 Cay nh phan
Giao trnh Cau truc D lieu va Giai thuat 223
Trong qua frnh Ian fm xuong cac nhanh, nou khoa can fhom vao chua co fh
vIoc fhom nuf moI cuoI cung so duoc fhuc hIon faI mof cay con rong. Tu cay con
rong fro fhanh cay con co mof nuf, chIou cao no da fang Ion. Iou nay co fho anh
huong don cac nuf fron duong dI fu nuf cha cua no fro Ion goc. V vay frong qua
frnh duyof cay dI xuong do fm vj fr fhom vao, chung fa can Iuu IaI vof do co fho
Ian nguoc vo do xu Iy. Chung fa co fho dung ngan xop, hoac don gIan hon Ia dung
ham do quy.

Tham bIon t al l er cua ham do quy duoc gan bang t r ue faI Ian do quy cuoI
cung, do chnh Ia Iuc nuf moI duoc fao ra faI mof cay con rong Iam cho no fang
chIou cao nhu da noI o fron. Nhung vIoc sau day can duoc fhuc hIon faI moI nuf
nam fron duong dI fu nuf cha cua nuf vua duoc fao ra cho don nuf goc cua cay.
Trong khI ma fham bIon t al l er fra Ion con Ia t r ue, vIoc gIaI quyof cu phaI fIop
fuc cho don khI co mof nuf nhan duoc frj fra vo cua fham bIon nay Ia f al se. Mof
khI co mof cay con nao do bao Ion rang chIou cao cua no khong bj fang Ion fh cac
nuf fron cua no so khong bj anh huong g, gIaI fhuaf kof fhuc. Nguoc IaI, goI nuf
dang duoc xu Iy frong ham do quy Ia sub_r oot . Sau khI goI do quy xuong cay con
va nhan duoc fhong bao fra vo rang chIou cao cay con co fang |t al l er == t r ue),
can xof cac fruong hop sau:

1. Cay con fang chIou cao von Ia cay con fhap hon cay con con IaI, fh chI co
fhong so can bang frong sub_r oot Ia can fhay doI, cay co goc Ia
sub_r oot cung khong fhay doI chIou cao. Tham bIon t al l er duoc gan vo
f al se baf dau fu day.

2. Truoc khI mof cay con bao Ion Ia fang chIou cao fh haI cay con von cao
bang nhau. Truong hop nay can fhay doI fhong so can bang frong
sub_r oot , dong fhoI cay co goc Ia sub_r oot cung cao Ion. Tham bIon
t al l er van gIu nguyon Ia t r ue do nuf fron cua sub_r oot gIaI quyof fIop.

3. Cay con fang chIou cao von Ia cay con cao hon cay con con IaI. KhI do
sub_r oot so co haI cay con co chIou cao chonh Ioch Ia 2, khong fhoa djnh
nghIa cay AVI. ay Ia fruong hop chung fa can don ham r i ght _bal ance
hoac l ef t _bal ance do can bang IaI cay co goc Ia sub_r oot nay. Chung
fa so nghIon cuu nhIom vu cua haI ham nay sau, nhung faI day cung co fho
noI fruoc rang vIoc can bang IaI Iuon gIaI quyof duoc frIof do. Co nghIa Ia
cay co goc Ia sub_r oot so khong bj fang chIou cao, va nhu vay, fham bIon
t al l er cung duoc gan vo f al se baf dau fu day.

VoI cac quyof djnh fron, chung fa co fho vIof cac phuong fhuc va cac ham phu
fro do fhom mof nuf moI vao cay AVI.

Chng 9 Cay nh phan
Giao trnh Cau truc D lieu va Giai thuat 224
t empl at e <cl ass Recor d>
Er r or _code AVL_t r ee<Recor d>: : insert( const Recor d &new_dat a)
/ *
post: Nou khoa frong new_dat a da co frong cay, phuong fhuc fra vo dupl i cat e_er r or . Nguoc
IaI, new_dat a duoc fhom vao cay sao cho cay van fhoa cay AVI, phuong fhuc fra vo
success.
uses: Ham avl _i nser t .
*/
{ bool t al l er ;
r et ur n avl_insert( r oot , new_dat a, taller) ;
}

t empl at e <cl ass Recor d>
Er r or _code AVL_t r ee<Recor d>: : avl_insert( Bi nar y_node<Recor d> *&sub_r oot ,
const Recor d &new_dat a, bool &t al l er )
/ *
pre: sub_r oot Ia NULL hoac Ia goc mof cay con frong cay AVI.
post: Nou khoa frong new_dat a da co frong cay, phuong fhuc fra vo dupl i cat e_er r or . Nguoc
IaI, new_dat a duoc fhom vao cay sao cho cay van fhoa cay AVI, phuong fhuc fra vo
success. Nou cay con co fang chIou cao, fhong so t al l er duoc gan frj t r ue, nguoc IaI
no duoc gan frj f al se.
uses: Cac phuong fhuc cua AVL_node; ham avl _i nser t mof cach do quy, cac ham
l ef t _bal ance va r i ght _bal ance.
*/
{ Er r or _code r esul t = success;
i f ( sub_r oot == NULL) {
sub_r oot = new AVL_node<Recor d>( new_dat a) ;
t al l er = t r ue;
}

el se i f ( new_dat a == sub_r oot - >dat a) {
r esul t = dupl i cat e_er r or ;
t al l er = f al se;
}

el se i f ( new_dat a < sub_r oot - >dat a) { / / Thom vao cay con fraI.
r esul t = avl _i nser t ( sub_r oot - >l ef t , new_dat a, t al l er ) ;
i f ( t al l er == t r ue)
swi t ch ( sub_r oot - >get _bal ance( ) ) { / / Change bal ance f act or s.

case l ef t _hi gher :
left_balance( sub_r oot ) ;
t al l er = false; / / Can bang IaI Iuon Iam cho cay khong bj cao Ion.
br eak;

case equal _hei ght :
sub_r oot - >set _bal ance( l ef t _hi gher ) ; / / Cay con co goc sub_r oot
/ / da bj cao Ion, t al l er van Ia true.
br eak;

case r i ght _hi gher :
sub_r oot - >set _bal ance( equal _hei ght ) ;
t al l er = false; / / Cay con co goc sub_r oot khong bj cao Ion.
br eak;
}
}
Chng 9 Cay nh phan
Giao trnh Cau truc D lieu va Giai thuat 225
el se { / / Thom vao cay con phaI.
r esul t = avl _i nser t ( sub_r oot - >r i ght , new_dat a, t al l er ) ;
i f ( t al l er == t r ue)
swi t ch ( sub_r oot - >get _bal ance( ) ) {

case l ef t _hi gher :
sub_r oot - >set _bal ance( equal _hei ght ) ;
t al l er = false; / / Cay con co goc sub_r oot khong bj cao Ion.

br eak;

case equal _hei ght :
sub_r oot - >set _bal ance( r i ght _hi gher ) ; / / Cay con co goc sub_r oot / / da
bj cao Ion, t al l er van Ia true.
br eak;

case r i ght _hi gher :
right_balance( sub_r oot ) ;
t al l er = false; / / Can bang IaI Iuon Iam cho cay khong bj cao Ion.
br eak;
}
}
r et ur n r esul t ;
}

9.5.2.2. Cuc phep quuy
Chung fa hay xof fruong hop nuf moI duoc fhom vao cay con cao hon va chIou
cao cua no fang Ion, chonh Ioch chIou cao haI cay con fro fhanh 2, va cay khong
con fhoa dIou kIon cua cay AVI. Chung fa can fo chuc IaI mof phan cua cay do
khoI phuc IaI su can bang. Ham right_balance so xom xof fruong hop cay co
cay con phaI cao hon cay con fraI 2 don vj. |Truong hop nguoc IaI duoc gIaI quyof
frong ham left_balance ma chung fa so xom nhu baI fap). Cho root Ia goc cua
cay va right_tree Ia goc cua cay con phaI cua no.

Co ba fruong hop can phaI xom xof, phu fhuoc vao fhong so can bang cua goc
cua r i ght _t r ee.

Trng hp 1: Cuy con phu cuu right_tree cuo hon cuy con tru cuu no
Chng 9 Cay nh phan
Giao trnh Cau truc D lieu va Giai thuat 226


Truong hop fhu nhaf, khI fhong so can bang frong nuf goc cua r i ght _t r ee Ia
r i ght _hi gher , xom hnh 9.18, can fhuc hIon phop quay fraI |/cjt rotation).
Chung fa can quay nuf goc cua right_tree huong vo root, ha root xuong fhanh
cay con fraI. Cay con T2, von Ia cay con fraI cua r i ght _t r ee, fro fhanh cay con
phaI cua r oot . o T2 gom cac nuf co khoa nam gIua khoa cua r oot va khoa cua
nuf goc cua r i ght _t r ee non cach fhay doI nhu vay van bao dam fhu fu cac khoa
cua mof cay nhj phan fm kIom. Phop quay fraI duoc hIon fhuc frong ham
rotate_left duoI day. Chung fa dac bIof Iuu y rang, khI fhuc hIon fhoo mof fraf fu
fhch hop, cac buoc gan fao fhanh mof su quay vong cua cac frj frong ba bIon con
fro. Sau phop quay, chIou cao cua foan bo cay gIam 1, nhung do no vua fang nhu
da noI o fron |va day cung chnh Ia nguyon nhan gay non su maf can bang can
phaI can bang IaI bang phop quay nay) , non chIou cao cuoI cung cua cay xom nhu
khong doI.


t empl at e <cl ass Recor d>
voi d AVL_t r ee<Recor d>: : rotate_left( Bi nar y_node<Recor d> *&sub_r oot )
/ *
pre: sub_r oot Ia dja chI cua goc cua mof cay con frong cay AVI. Cay con nay co cay con phaI
khong rong.
post: sub_r oot duoc gan IaI dja chI cua nuf von Ia con phaI cua no, nuf goc cua cay con ban
dau so fhanh nuf con fraI cua cay con moI.
*/


HInh 9.18 Truong hop 1: KhoI phuc su can bang boI phop quay fraI.
Chng 9 Cay nh phan
Giao trnh Cau truc D lieu va Giai thuat 227
{
i f ( sub_r oot == NULL | | sub_r oot - >r i ght == NULL) / / cac fruong hop
/ / khong fho xay ra
cout << " WARNI NG: pr ogr amer r or det ect ed i n r ot at e_l ef t " << endl ;

el se {
Bi nar y_node<Recor d> *r i ght _t r ee = sub_r oot - >r i ght ;
sub_r oot - >r i ght = r i ght _t r ee- >l ef t ;
r i ght _t r ee- >l ef t = sub_r oot ;
sub_root = r i ght _t r ee;
}
}


Trng hp 2: Cuy con tru cuu right_tree cuo hon cuy con phu cuu no

Truong hop fhu haI, khI fhong so frong r i ght _t r ee Ia l ef t _hi gher , phuc
fap hon. Thoo hnh vo 9.19, nuf sub_tree can dI chuyon Ion haI muc do fhanh
nuf goc moI. Cay con phaI T3 cua sub_tree so fro fhanh cay con fraI cua
right_tree. Cay con fraI T2 cua sub_tree fro fhanh cay con phaI cua root.
Qua frnh nay con duoc goI Ia phop quay kop |Joub/c rotation), do su bIon doI can
qua haI buoc. Thu nhaf Ia cay con co goc Ia right_tree duoc quay sang phaI do
sub_tree fro fhanh goc cua cay nay. Sau do cay co goc Ia root quay sang fraI do
sub_tree fro fhanh goc.

Trong fruong hop fhu haI nay, fhong so can bang moI cua root va
right_tree phu fhuoc vao fhong so can bang fruoc do cua sub_tree. Thong so
can bang moI cua sub_tree Iuon Ia equal _hei ght . Hnh 9.19 mInh hoa cac cay
con cua sub_tree co chIou cao bang nhau, nhung fhuc fo sub_tree co fho Ia
Ioff_hIghor hoac rIghf_hIghor. Cac fhong so can bang kof qua so Ia:

HInh 9.19 Truong hop 2: KhoI phuc su can bang boI phop quay kop.
Chng 9 Cay nh phan
Giao trnh Cau truc D lieu va Giai thuat 228
ol d sub_tree new root new right_tree new sub_tree
- - - -
/ - \ -
\ / - -

Trng hp 3: Hu cuy con cuu right_tree cuo bung nhuu

CuoI cung, chung fa xof fruong hop fhu ba, khI ca haI cay con cua right_tree
cao bang nhau, nhung fhuc fo fruong hop nay khong fho xay ra.

Cung non nhac IaI rang fruong hop can gIaI quyof o day Ia do chung fa vua
fhom mof nuf moI vao cay co goc right_tree, Iam cho cay nay co chIou cao Ion
hon chIou cao cay con fraI cua root Ia 2 don vj. Nou cay r i ght _t r ee co haI cay
con cao bang nhau sau khI nhan fhom mof nuf moI vao cay con fraI hoac cay con
phaI cua no, fh no du khong the tung cheu cuo, do chIou cao cua no van Iuon
bang chIou cao cua cay con von cao hon cong fhom 1. Vay, fruoc khI fhom nuf moI
ma cay co goc Ia r i ght _t r ee da cao hon cay con fraI cua roof 2 don vj Ia vo Iy
va saI gIa fhIof rang cay von phaI fhoa dIou kIon cua cay AVI.
9.5.2.3. Hum rght_bulunce
Chung fa co ham r i ght _bal ance duoI day. Cac ham r ot at e_r i ght va
l ef t _bal ance cung fuong fu r ot at e_l ef t va r i ght _bal ance, chung fa xom
nhu baI fap.

t empl at e <cl ass Recor d>
voi d AVL_t r ee<Recor d>: : right_balance( Bi nar y_node<Recor d> *&sub_r oot )
/ *
pre: sub_r oot chua dja chI goc cua cay con frong AVI ma faI nuf goc nay dang vI pham dIou
kIon AVI: cay con phaI cao hon cay con fraI 2 don vj.
post: VIoc can bang IaI gIup cho cay con co goc sub_r oot da fhoa dIou kIon cay AVI.
uses: cac phuong fhuc cua AVL_node; cac ham r ot at e_r i ght va r ot at e_l ef t .
*/
{
Bi nar y_node<Recor d> *&r i ght _t r ee = sub_r oot - >r i ght ;

swi t ch ( r i ght _t r ee- >get _bal ance( ) ) {

case right_higher: / / Thuc hIon 1 phop quay don sang fraI.
sub_r oot - >set _bal ance( equal _hei ght ) ;
r i ght _t r ee- >set _bal ance( equal _hei ght ) ;
rotate_left( sub_r oot ) ;
br eak;

case equal_height: / / Truong hop khong fho xay ra.
cout << " WARNI NG: pr ogr amer r or det ect ed i n r i ght _bal ance" <<endl ;

Chng 9 Cay nh phan
Giao trnh Cau truc D lieu va Giai thuat 229
case left_higher: / / Quay kop: quay don sang phaI, roI quay don sang fraI.
Bi nar y_node<Recor d> *sub_t r ee = r i ght _t r ee- >l ef t ;
swi t ch ( sub_t r ee- >get _bal ance( ) ) {

case equal_height:
sub_r oot - >set _bal ance( equal _hei ght ) ;
r i ght _t r ee- >set _bal ance( equal _hei ght ) ;
br eak;

case left_higher:
sub_r oot - >set _bal ance( equal _hei ght ) ;
r i ght _t r ee- >set _bal ance( r i ght _hi gher ) ;
br eak;

case right_higher:
sub_r oot - >set _bal ance( l ef t _hi gher ) ;
r i ght _t r ee- >set _bal ance( equal _hei ght ) ;
br eak;
}
sub_t r ee- >set _bal ance( equal _hei ght ) ;
rotate_right( r i ght _t r ee) ;
rotate_left( sub_r oot ) ;
br eak;
}
}

Hnh 9.20 mInh hoa mof v du vIoc fhom vao can co quay don va quay kop.
9.5.2.4. Hunh v cuu gu thuut
So Ian ma ham avl _i nser t goI do quy chnh no do fhom mof nuf moI co fho
Ion bang chIou cao cua cay. Thoaf nhn, duong nhu Ia moI Ian goI do quy dou dan
don mof Ian quay don hoac quay kop cho cay con fuong ung, nhung fhuc ra, nhIou
nhaf Ia chI co mof phop quay |don hoac kop) Ia duoc fhuc hIon. o nhn fhay dIou
nay, chung fa bIof rang cac phop quay duoc fhuc hIon chI frong cac ham
r i ght _bal ance va l ef t _bal ance, va cac ham nay duoc goI chI khI chIou cao
cua cay con co fang Ion. Tuy nhIon, khI cac ham nay fhuc hIon xong, cac phop
quay da Iam cho chIou cao cay con fro vo gIa frj ban dau, nhu vay, doI voI cac Ian
goI do quy fruoc do chua kof fhuc, chIou cao cay con fuong ung so khong fhay doI,
va so khong co mof phop quay hay mof su fhay doI cac fhong so can bang nao
nua.

Phan Ion vIoc fhom vao cay AVI khong dan don phop quay. Ngay ca khI phop
quay Ia can fhIof, no fhuong xay ra gan voI nuf Ia vua duoc fhom vao. Mac du gIaI
fhuaf fhom vao mof cay AVI Ia phuc fap, nhung chung fa co Iy do do fIn rang
fhoI gIan chay cua no khong khac bao nhIou so voI vIoc fhom vao mof cay nhj
phan fm kIom bnh fhuong co cung chIou cao. Chung fa con co fho hy vong rang
chIou cao cua cay AVI nho hon raf nhIou chIou cao cua cay nhj phan fm kIom
bnh fhuong, va nhu vay ca haI vIoc fhom vao va IoaI bo nuf so hIou qua hon
nhIou so voI cay nhj phan fm kIom bnh fhuong.

Chng 9 Cay nh phan
Giao trnh Cau truc D lieu va Giai thuat 230
9.5.3. Lou mot nut
VIoc IoaI mof nuf x ra khoI mof cay AVI cung fhoo y fuong fuong fu, cung bao
gom phop quay don va phop quay kop. Chu ng fa so phac fhao cac buoc cua gIaI
fhuaf duoI day, hIon fhuc cu fho cua ham xom nhu baI fap.

1. Chung fa chI can xom xof fruong hop nuf x can IoaI co nhIou nhaf Ia mof
cay con, v doI voI fruong hop x co haI cay con, chung fa so fm nuf y Ia nuf
ko fruoc no |hoac nuf ko sau no) frong fhu fu duyof inorJcr do IoaI fhay cho
no. Tu nuf con fraI cua x nou dI chuyon sang phaI cho don khI khong fho dI
chuyon duoc nua, chung fa gap mof nuf y khong co con phaI. Iuc do chung
fa so chop du IIou frong y vao x, khong fhay doI fhong so can bang cung
nhu con fraI va con phaI cua x. CuoI cung nuf y so duoc IoaI dI fhay cho nuf
x fhoo cac buoc duoI day.

2. CoI nuf can IoaI Ia x. IoaI nuf x ra khoI cay. o x co nhIou nhaf mof con,
vIoc IoaI x don gIan chI Ia noI fham chIou fu nuf cha cua x don nuf con cua
no |hoac NULL nou x khong co con nao). ChIou cao cay con co goc Ia x gIam
dI 1, va dIou nay co the unh huong den cuc nut num tren duong d tu
x nguoc ve goc cuu cuy. V vay frong qua frnh duyof cay do xuong don
nuf x, chung fa can Iuu vof bang cach su dung ngan xop do co fho xu Iy Ian
nguoc vo. o don gIan, chung fa co fho dung hum de quy vo thum ben
shorter kIou bool cho bIof chIou cao cua cay con co bj gIam dI hay
khong. Cac vIoc can Iam faI moI nuf phu fhuoc vao frj cua fham bIon
shor t er ma con no fra vo sau khI vIoc goI do quy xuong cay con kof fhuc,
vao fhong so can bang cua no, va doI khI phu fhuoc vao ca fhong so can
bang cua nuf con cua no.

HInh 9.20 Thom nuf vao cay AVI: cac fruong hop can co phop quay.
Chng 9 Cay nh phan
Giao trnh Cau truc D lieu va Giai thuat 231
3. Ion bool shor t er duoc khoI gan frj fruo. Cac buoc sau day so duoc fhuc
hIon faI moI nuf nam fron duong dI fu nuf cha cua x cho don nuf goc cua
cay. Trong khI ma fham bIon shor t er fra Ion con Ia t r ue, vIoc gIaI quyof
cu fIop fuc cho don khI co mof nuf nhan duoc frj fra vo cua fham bIon nay
Ia f al se. Mof khI co mof cay con nao do bao rang chIou cao cua no khong
bj gIam dI fh cac nuf fron cua no so khong bj anh huong g ca. Nguoc IaI,
goI nuf p Ia nuf vua goI do quy xuong nuf con xong va nhan fhong bao
shor t er Ia t r ue, can xof cac fruong hop sau:

Trng hp 1: Nuf p hIon faI co fhong so can bang Ia equal_height.
Thong so nay so fhay doI fuy fhuoc vao cay con fraI hay cay con phaI cua
no da bj ngan dI. Ion shor t er doI fhanh false.

Trng hp 2: Nuf p hIon faI co fhong so can bang khong lu
equal_height. Cuy con von cuo hon vuu b{ ngun d. Thong so can
bang cua p chI can doI vo equal _hei ght . Truong hop nay cay goc p cung
bj gIam chIou cao non fham bIon shor t er van Ia t r ue do fra Ion fron cho
cha cua p gIaI quyof fIop.

Trng hp 3: Nuf p hIon faI co fhong so can bang khong lu
equal_height. Cuy con von thup hon vuu b{ ngun d. Nhu vay faI nuf
p v phum deu ken cuu cuy AVL, va chung fa fhuc hIon phop quay do
khoI phuc IaI su can bang nhu sau. CoI q Ia goc cua cay con cao hon cua p,
co 3 fruong hop fuong ung voI fhong so can bang frong q:

Truong bop Ja: Thong so cun bung cuu q lu equal_height. Thuc
hIon mof phop quuy don do fhay doI cac fhong so can bang cua p va q,
frang fhaI can bang so duoc khoI phuc, shor t er doI fhanh false.

Truong bop Jb: Thong so cun bung cuu q gong vo thong so cun
bung cuu p. Thuc hIon mof phop quuy don do chuyon cac fhong so
nay tbanb equal_height, shorter oan /a true.

Truong bop Jc: Thong so cun bung cuu q nguoc vo thong so cun
bung cuu p. Thuc hIon mof phop quuy kep |fruoc hof quay quanh q,
sau do quay quanh p), fhong so can bang cua goc moI so Ia
equal _hei ght , cac fhong so can bang cua p va q duoc bIon doI fhch
hop, shor t er van Ia true.

Trong cac fruong hop 3a, b, c, chIou cua cac phop quay phu fhuoc vao cay con
fraI hay cay con phaI bj ngan dI. Hnh 9.21 mInh hoa mof vaI fruong hop, va mof
v du IoaI mof nuf duoc mInh hoa frong hnh 9.22.
Chng 9 Cay nh phan
Giao trnh Cau truc D lieu va Giai thuat 232



HInh 9.21 Cac fruong hop IoaI mof nuf ra khoI cay AVI.
Chng 9 Cay nh phan
Giao trnh Cau truc D lieu va Giai thuat 233



HInh 9.22 V du IoaI mof nuf ra khoI cay AVI.
Chng 9 Cay nh phan
Giao trnh Cau truc D lieu va Giai thuat 234
9.5.4. Cheu cuo cuu cuy AVL
VIoc fm chIou cao cua mof cay AVI frung bnh Ia mof vIoc raf kho, do do vIoc
xac djnh so buoc frung bnh can fhuc hIon boI cac gIaI fhuaf frong phan nay cung
khong do. Cach do nhaf cho chung fa Ia xac djnh nhung g so xay ra frong fruong
hop xau nhaf, va cac kof qua nay so cho chung fa fhay rang cac hanh vI cua cay
AVI frong fruong hop xau nhaf cung khong fo hon cac hanh vI cua cac cay ngau
nhIon. ang chung fhuc nghIom cho fhay cac hanh vI frung bnh cua cac cay AVI
fof hon raf nhIou so voI cac cay ngau nhIon, hau nhu no con fof ngang voI nhung
g so co duoc fu mof cay can bang hoan foan.

o xac djnh chIou cao foI da co fho co duoc cua mof cay AVI co n nuf, chung
fa so xom fhu voI mof chIou cao h cho fruoc, cay AVI so co so nuf foI fhIou Ia bao
nhIou. CoI I
h
Ia mof cay nhu vay, fh cay con fraI va cay con phaI cua nuf goc cua
I
h


so Ia I
I
va I
r
. Mof frong haI cay con nay phaI co chIou cao Ia h-1, gIa su cay I
I
,
va cay con con IaI co chIou cao h-1 hoac h-2. o I
h
co so nuf foI fhIou cua mof cay
AVI co chIou cao h, I
I
cung phaI co so nuf foI fhIou cua cay AVI cao h-1 |co
nghIa Ia I
I
co dang I
h-1
), va I
r
phaI co chIou cao h-2 voI so nuf foI fhIou |I
r
co
dang I
h-2
).

Cac cay duoc fao boI quy fac fron, nghIa Ia cac cay fhoa dIou kIon cay AVI
nhung cang fhua cang fof, duoc goI Ia cac cay Fibonacci. Mof so f cay dau fIon co
fho duoc fhay frong hnh 9.23.

VoI ky hIou 1T1 bIou dIon so nuf frong cay T, chung fa co cong fhuc sau:

1 I
h
1 = 1 I
h-1
1 + 1 I
h-2
1 + 1.


HInh 9.23 Cac cay IIbonaccI
Chng 9 Cay nh phan
Giao trnh Cau truc D lieu va Giai thuat 235
voI 1 I
0
1 = 1 va 1 I
1
1 = 2. ang cach fhom 1 vao ca haI vo, chung fa fhay
con so 1 I
h
1+1 fhoa djnh nghIa cua cac so Fibonacci bac 2. ang cach fnh cac
so Fibonacci chung fa co

1 I
h
1+1


Iay /ogarit haI vo va chI gIu IaI cac so Ion chung fa co

h 1.44 Ig 1 I
h
1.

Kof qua cho fhay mof cay AVI n nuf fhua nhaf so co chIou cao xap xI 1.44 Ig
n. Mof cay nhj phan can bang hoan foan co n nuf co chIou cao bang Ig n, con cay
suy fhoaI so co chIou cao Ia n. ThoI gIan chay cac gIaI fhuaf fron cay AVI duoc
bao dam khong vuof qua 44 phan fram fhoI gIan can fhIof doI voI cay foI uu.
Trong fhuc fo, cac cay AVI con fof hon raf nhIou. Iou nay co fho duoc chung
mInh nhu sau, ngay ca doI voI cac cay Fibonacci - cac cay AVI frong fruong hop
xau nhaf fhoI gIan fm kIom frung bnh chI co 4 phan fram Ion hon cay foI uu.
Phan Ion cac cay AVI so khong fhua fhof nhu cac cay Fibonacci, va do do fhoI
gIan fm kIom frung bnh fron cac cay AVI frung bnh raf gan voI cay foI uu.
Thuc nghIom cho fhay so Ian so sanh frung bnh khoang Ig n + 0.25 khI n Ion.
1 1+ 5

5 2
h+2
Chng 9 Cay nh phan
Giao trnh Cau truc D lieu va Giai thuat 236

You might also like