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