Вы находитесь на странице: 1из 58

1.

Noi u n i intro d u c t i v e
Exist mai multe mod uri echivale n t e de definire a arborilor. Din punct ul de ved er e al teoriei grafurilor nu mi m arbore un graf neorie n t a t conex i fr cicluri. Dac graful est e aciclic, dar nu est e conex l vom numi pdur e. De exe m pl u,

Fig. 1. a. est e arbor e , b. est e p dure, nefiind conex, iar c. nu est e nici arbor e , nici p dure, deo ar e c e con ine cicluri. 1. 1 . Propri e t i al e arb oril or Teor e m a 1 Fie ! = "#, $% un graf neorie n t a t . $rm t o a r el e afirma &ii sunt echivale n t e ' 1% ! est e arbor e . (% )ricar e dou v*rfuri din ! sunt unite printr+ un lan& simplu unic. ,% ! est e conex minim al "dac suprim m o muc hi e, graful ob&inut est e necon e x%. -% ! est e conex i are #+1 muchii. .% ! est e aciclic i are #+1 muc hii. /% ! est e aciclic maxi m al "dac ad u g m o muc hi e, graful ob&inut con&in e cicluri%. De m o n s tr a i e: 1 2 Dac ! est e arbor e , atunci ! est e conex, deci oricar e ar fi dou v*rfuri din graf, aces t e a sunt unite prin cel pu&in un lan& simplu. 0res u p u n e m prin reduc e r e la abs ur d c exist x i 1 dou v*rfuri unite prin dou
5

lan&uri simple distinct e l1 i l2 .

Fig. (. Fie 2 primul v*rf de la care cele dou lan&uri se des p a r t , iar t primul v*rf n care cele dou lan&uri se nt*ln e s c din nou. Dac not m l3 1 por&iun e a de pe lan&ul l1 ntre 2 i t, iar cu l3 ( por&iun e a de pe lan&ul l ( ntre 2 i t, atunci l3 1 i l3 ( nu au v*rfuri comu n e , cu exce p &i a v*rfurilor 2 i t. 4onca t e n * n d l3 1 i l3 ( , ob&in e m un ciclu+ contr a dic&i e cu ipote2 a c ! est e arbor e. Deci, oricar e dou v*rfuri din graf sunt unite printr+ un lan& simplu unic. 2 3 Dac oricar e dou v * rfuri x, 1 # sunt unite printr+ un lan& simplu unic, atu nci orice muc hi e [x, 1 ]$ repr e2int unicul lan& dintre x i 1. 5uprim * n d muchi a [x, 1 ], ntre x i 1 nu va mai exist a lan&, deci graful ob&inut nu va mai fi conex. 3 4 6ot m cu n nu m r ul de v * rfuri i cu m num r ul de muc hii din graf. 0entru a de mo n s t r a c orice graf conex minim al are n+ 1 muc hii vom de m o n s t r a prin induc&ie comple t dup n c m n+ 1. 4um n orice graf conex m n+ 1, dedu c e m m = n+ 1. 0"1% Dac n = 1, atunci m = 7 m = n+ 1. 0"(% Dac n = (, atunci m =1 m = n+ 1. 0"n% 0resu p u n e m c ntr+ un graf conex minim al cu cel mult n v*rfuri num r ul de muc hii est e strict mai mic dec * t nu m r ul de v*rfuri. 0"n +1% Demo n s t r m c ntr+ un graf conex minim al cu n +1 v*rfuri, num r ul de muchii est e cel mult eg al cu n. Fie ! conex minim al cu n +1 v*rfuri i m muc hii.
6

Elimin* n d o muchi e oarec a r e din graf ob&in e m un graf !3 cu m+ 1 muc hii i dou comp o n e n t e conex e 4 1 i 4 ( cu n 1 , resp e c tiv n ( v*rfuri "n 1 +n ( = n +1% i m 1 , res p e c tiv m ( muc hii "m 1 +m ( = m+ 1%. 5ubgr afurile 4 1 i 4 ( sunt conex e minim al e, altfel graful ! nu ar fi conex minim al. Din ipote2 a inductiv re2ult c m 1 n 1 +1, m ( n ( +18 dar m 1 +m ( = m+ 1 n 1 +n ( = n+ ( m n+ 1. Deci ! conex minim al implic ! conex cu n+ 1 muchii. 4 5 Fie ! un graf conex cu n+ 1 muchii. 5 de m o n s t r m c ! est e aciclic. 0resu p u n e m prin reduc e r e la abs ur d, c graful ! con&in e un ciclu 4 form a t din v*rfurile v 1 , v ( , ..., v 9 . 5 consid e r m subgr af ul par&ial ! 9 = "#9 , $9 % cons t * n d din ciclul 4. Deci #9 = {v 1 , v ( ,..., v 9 }, iar $ 9 = {[v 1 ,v ( % ], [v ( ,v , ],..., [v 9+1 ,v 9 ], "v 9 ,v 1 ]} " #9 =$9 = 9%. Dac #9 : #, atu nci v i#9 i v 9 +1 #+#9 astfel nc*t [v i, v 9 +1 ]$, graful ! fiind conex. 4onstr ui m ! 9 +1 = "#9 +1 , $9 +1 % astfel '#9 +1 = #9 {v 9 +1 }8 $9 +1 =$9 {[v i,v 9 +1 ]} i $9 +1 =#9 +1 =9 +1. 4*t timp 9 +1 : n, aplic m acela i proc e d e u p*n c*nd ob&in e m un graf ! n = "#, $n %, cu $n = n, $n $8 deci $ n, contr a dic&i e cu ipote2 a $= n+ 1. 5 6 0resu p u n e m c graful ! est e aciclic cu n+ 1 muc hii, s de m o n s t r m c ! est e aciclic maxi m al. Fie 4 1 , 4 ( ,..., 4 p cele p comp o n e n t e l e conex e ale grafului !, av* n d resp e c tiv n 1 , n ( ,..., n p v*rfuri i m 1 , m ( ,..., m p muc hii fiecar e. Eviden t c n 1 +n ( +... +n p = n ; i m 1 +m ( +... +m p = n+ 1. 4um graful ! est e aciclic, ded uc e m c fiecar e comp o n e n t conex est e un arbor e . Deoar e c e am de m o n s t r a t c 1 ., re2ult c m i= n i+1, i{1, (, ..., p }. <nlocuind n rela&ia de mai sus, ob&ine m n+ p = n+ 1 p = 1, deci ! conex. Dac ! est e conex i aciclic, confor m defini&iei ! est e arbor e. Dar am de m o n s t r a t c 1 (,
7

deci oricar e dou v*rfuri din ! sunt unite printr+ un lan& simplu. =stfel, ad u g * n d orice muchi e ob&ine m un ciclu. 6 1 0resu p u n e m c graful ! est e aciclic, dar dac am mai ad u g a o muchie s+ ar ob&ine un ciclu. 5 de m o n s t r m c ! est e conex. Fie u i v dou v*rfuri nea di ac e n t e din graf, arbitrar ales e. Deoar e c e ad u g * n d muchia [u, v ] se ob&in e un ciclu, re2ult c u i v sunt unite printr+ un lan& ale crui muchii apar &in grafului !. 4um u,v au fost ales e arbitrar, dedu c e m c graful ! est e conex. >.E.D. Teor e m a 2 6umer el e ntregi 7 : d 1 d ( ... d n "n (% sunt grad el e v*rfurilor unui arbor e dac i num ai dac d 1 +d ( +... +d n = (n+ (. De m o n s tr a i e: Necesitat e a 4ondi&ia est e nec e s a r , deo ar e c e orice arbor e cu n v*rfuri are n+ 1 muchii, iar su m a grad elor v*rfurilor oricrui graf est e de dou ori nu m r ul de muc hii. Deci d 1 +d ( +... +d n = (n+ (. Suficien a Fie 7 : d 1 d ( ... d n astfel nc*t d 1 +d ( +... +d n = (n+ (. 5 de m o n s t r m c exist un arbor e cu grad el e v*rfurilor d 1 , d ( ,..., d n . #om proc e d a prin induc&ie. 0"(% Dac d 1 +d ( = (, atunci d 1 = d ( = 1 , arbor el e fiind cel din figura de mai ?os '

Fig. , 0"n% 0resu p u n e m acu m c propriet a t e a est e adev r a t pentr u orice secv e n & de n num e r e nat ur al e 7 : d 1 d ( ... d n , astfel nc*t d 1 +d ( +... +d n = (n+ (. 0"n +1% 5 de mo n s t r m c pentr u orice secv e n & 7 : d3 1 d3 ( ... d3 n d3 n +1 astfel nc*t d3 1 +d3 ( +... +d3 n +1 = (n, exist un arbor e cu n +1 v*rfuri cu secv e n & a grad elor d3 1 , d3 ( , ..., d3 n +1 .
8

)bserv m c exist mc a r un nod ter min al x 1 cu grad ul d3 1 =1, altfel dac d i (, i{1, (,..., n +1 } d3 1 +d3 ( +... +d3 n +1 ("n +1%, cee a ce contr a 2ic e ipote2 a . <n mod analog, obs erv m c exist mc a r un nod net er mi n al x n +1 , cu grad ul d3 n +1 @ 1, altfel dac d3 i = 1, i{1, (, ..., n +1 } d3 1 +d3 ( +... +d3 n +1 = n +1 : (n . 5 consid e r m urm t o a r e a secv e n & de n num e r e ntre gi d3 ( ,..., d3 n , d3 n +1 +1 cu propriet a t e a c d3 ( +... +d3 n +d3 n +1 = (n+ (. Din ipote2 a inductiv exist un arbor e = n cu n v*rfuri i secv e n & a grad elor d3 ( ,..., d3 n , d3 n +1 +1. =dug m la arbor el e =n un v*rf pe care l unim printr+ o muchie cu v*rful av* n d grad ul d3 n +1 +1. )b&ine m un arbor e =n +1 cu grad el e v*rfurilor d3 1 , d3 ( ,..., d3 n +1 . >.E.D. Demo n s t r a &i a aces t ei teor e m e ofer i o solu&ie cons tr uc tiv pentr u ob&in er e a unui arbor e cu secv e n & a grad elor dat . #om re&ine grad el e v*rfurilor ntr+ un vector d de dime n si u n e n, ordon a t cresc t o r, cu sum a comp o n e n t e l or egal cu (n+ (. =rborele va fi repr e2 e n t a t prin matric e a muchiilor, o ma tric e a cu dou linii i n+ 1 coloan e , n care pentr u fiecar e muchie din arbor e vom re&ine extr e mi t &ile. 5pre deos e bir e de idee a din de m o n s t r a &i e , pentr u a cons er v a ordine a n vectorul d, la fiecar e pas al algorit m ul ui grad ul care va fi decr e m e n t a t va fi primul grad mai mar e ca 1 i nu ultimul. Proc e d u r e Det e r m i n a r e Arbor e ; * //vector u d! matrice a a "i n! nu m r u de v # rfuri! sunt variabi e $ oba e var NrMuc h ii S e l e c t a t e !"Ter m i n a l !"N e t e r m i n a l # $nt e % e r ; be%in NrMuc h ii S e l e c t a t e # = &;
0rogr a m ul %onstruc & ie' (rbore' cu' Secv e n & a' )rade or' Dat * de la sf * r; itul capitolului cure n t gen e r e a 2 un arbor e av * nd secv e n a grad el or dat .
*

!"Ter m i n a l # = 1; ' hil e NrMuc h ii S e l e c t a t e ( n) 1 do b e % i n //se ect e + o m uc ,ie -n arbore !"N e t e r m i n a l # = !"Ter m i n a l + 1 8 //caut un v # rf cu $rad mai mar e dec # t 1 ' hil e d [!"N e t e r m i n a l ] = 1 inc*!"N e t e r m i n a l + ; inc*NrMu c h ii S e l e c t a t e + ; //se ect e + m uc ,ia [.f/er min a !.fN e t er m i n a ] a [1 NrMu c h ii S e l e c t a t e ] # = !"Ter m i n a l; a [2 NrMu c h ii S e l e c t a t e ] # = !"N e t e r m i n a l ; d e c * d [!"N e t e r m i n a l ]+; inc*!"T er m i n a l + ; en d ; en d ; De exe m pl u, pentr u n =11 i ; irul grad elor' 1 ( , - . / A B C 1 1 7 1 1 1 1 1 1 1 1 ( , - ob&in e m arbor el e din figura -.

do

Fig. =cest proce d e u sug er e a 2 o me t o d foart e eficient de repr e2 e n t a r e a arborilor. Dac =n est e un arbor e cu v*rfurile x 1 , x ( ,.., x n , suprim m v*rful ter min al cu cel mai mic indice i muchia inciden t cu ace s t a i re&ine m a 1 , v*rful adiac e n t cu v*rful ter min al supri m a t . =m ob&inut astfel un subgr af cu n+ ( muchii conex i aciclic, deci un arbor e =n+1 . Depe t m proc e d e ul pentr u arbor el e =n+1 , det e r mi n * n d un al doilea v*rf, a ( , adiac e n t cu v*rful ter min al de indice minim ce va fi elimin a t din
10

=n+1 mpre u n cu muchia inciden t cu el .a. m. d., p*n c*nd se ob&in e un arbor e =( cu dou v*rfuri adiac e n t e . =m ob&inut astfel un siste m {a 1 , a ( ,.., a n+( } de n+ ( nu m e r e 1 a in, i{1,(,...,n+ ( } asociat arbor elui =n nu mit codu 0r1ffer al lui =n . 0entru arbor el e din figura -, codul 0rEffer est e a ={B,C,C,1 7, 1 7, 1 7 , 1 1 , 1 1 , 1 1 }. Prop o ,i i e Exist o cores p o n d e n & biunivoc ntre mul&im e a arborilor = cu n v * rfuri i mul&im e a siste m el o r {a 1 , a ( , ..., a n+( }, a i{1,(,...,n }, i{1,(,...,n+ ( } . De m o n s tr a i e: 2n3ectivitat e a Fie a ={a 1 , a ( , ..., a n+( }, 1 a i n, i{1,(,...,n+ ( }, codul 0rEffer al unui arbor e =. 4omplet m irul cu a n+1 = n, deci a = {a 1 ,a ( ,...,a n+( ,a n+1 }. 5 not m b = "b 1 , b ( , ..., b n+( , b n+1 % indicii v*rfurilor n ordine a n care au fost elimina t e . )bserv m c ' 1. b i b ?, i ? "deo a r e c e un nod nu poat e fi elimin a t dec * t o dat %8 2. b i a i "pen tr u c exist muchia [a i, b i]%8 3. b i a ?, ? @ i "b i fiind elimina t la pas ul i, nu mai poat e fi print el e unui alt v*rf elimina t ulterior%8 -. 9 {b 1 , b ( , ..., b i+1 , a i, a i+1 , ..., a n+1 }, 9 est e un v*rf ter min al al arbor elui =+{b 1 , b ( , ..., b i+1 }, altfel 9 ar fi adiac e n t cu un v*rf ce va fi suprim a t ulterior, deci 9 = a ?, cu ? @ i+ contr a dic&ie "un v*rf care nu a fost elimina t i care nu est e print e pentr u un alt v*rf, est e v*rf ter min al%. .. b i, din mod ul de definire a codului 0rEffer va fi ' b i = min { 9 9 {b 1 , b ( , ..., b i+1 , a i, a i+1 , ..., a n+ 1 }} "F% Deci din codul 0rEffer am putu t det e r mi n a n mod unic ordin e a de elimin ar e a v*rfurilor i implicit, muchiile arbor elui =GH [a i, b i], i {1, (, ..., n+ 1 }I

11

Sur3ectivitat e a Demo n s t r m c a = {a 1 , a ( , ..., a n+( }, 1 a i n, i{1,(,...,n+ ( }, exist un arbor e = cu n v*rfuri astfel nc*t codul 0rEffer al lui = s fie irul a. 4omplet m a cu a n+1 = n i definim b i confor m rela&iei "F%, i{1, (, ..., n+ 1 }. 4onstrui m =, graful cu muc hiile $ = {[a i, b i], i{1, (, ..., n+ 1 }}. #om art a c = est e arbor e i codul 0rEffer al lui = est e {a 1 , a ( , ..., a n+( }. 6ot m $i = $+ {[b 1 , a 1 ],..., [b i+1 , a i+1 ]}, i{1,(,...,n+ 1 }, #i = {1,(,...,n }+{b 1 , b ( , ..., b i+1 }. Evident = = =1 , iar =n est e form a t nu m ai din v*rful n, deci =n est e arbor e. 5 de mo n s t r m c b i est e v*rf ter min al n =i. b i = min { 9 9 {b 1 , b ( , ..., b i+1 , a i, a i+1 , ..., a n+1 }} Dar a i=i, pentr u c din rela&ia "F% a i b ?, ? : i, iar b i nu poat e fi adiac e n t n =i dec * t cu a i, deo a r e c e , dac b i ar fi incide n t cu o alt muchi e [b ?, a ?], ? @ i din =i ar nse m n a c b i = b ? sau a ? = b i, cu ? @ i cee a ce est e n contr a dic&i e cu defini&ia lui b i. =i+1 se ob&ine din =i elimin * n d v*rful ter min al b i i muc hi a [b i, a i], incide n t cu ace a s t a . 0roce d * n d inductiv, cum =n est e arbor e, ded uc e m c =i, i{1,...,n } sunt arbori, n particular = est e arbor e . Jot din definire a lui b i re2ult c b i est e v*rful ter min al de indice minim, deci, confor m defini&iei, {a 1 , a ( , ..., a i+( } va fi codul 0rEffer al arbor elui =i. <n particular dedu c e m c {a 1 ,a ( , ..., a n+( } est e codul 0rEffer al arbor elui =. >.E.D. 5 consid er m , de exe m pl u, n =11 i a = {1,(,(,(,1, -, -, 1, . }. 0entru a det er mi n a muc hiile arbor elui cu aces t cod 0rEffer, comple t m codul cu a 17 =11. Deci a ={1,(,(,(,1, -, -, 1, ., 1 1 } i det e r mi n m ' b 1 = min { 9 9 {1,(,(,(, 1, -, -, 1, ., 1 1 }}=, b ( = min { 9 9 {,,(,(,(, 1, -, -, 1, ., 1 1 }}=/
12

b , = min { 9 9 {,,/,(,(, 1, -, -, 1, ., 1 1 }}=A b - = min { 9 9 {,,/,A,(, 1, -, -, 1, ., 1 1 }}=B b . = min { 9 9 {,,/,A,B, 1, -, -, 1, ., 1 1 }}=( b / = min { 9 9 {,,/,A,B, (, -, -, 1, ., 1 1 }}=C b A = min { 9 9 {,,/,A,B, (, C, -, 1, ., 1 1 }}=17 b B = min { 9 9 {,,/,A,B, (, C, 1 7, 1, ., 1 1 }}=b C = min { 9 9 {,,/,A,B, (, C, 1 7, -, ., 1 1 }}=1 b 17 = min { 9 9 {,,/,A,B, (, C, 1 7, -, 1, 1 1 }}=. Kuchiile arbor elui sunt ' [1,, ], [(,/ ], [(,A ], [(,B ], [1,( ], [-,C ], [-,17 ], [1,- ], [.,1 ], [.,11 ].

Fig. . Folosind aces t re2ult a t, dedu c e m c nu m r ul arborilor ce se pot cons tr ui cu n v*rfuri dat e est e egal cu n n+( , num r ul func&iilor bi?ective definite pe o mul&im e cu n+ ( ele m e n t e , cu valori ntr+ o mul&im e cu n ele m e n t e . =ceas t formul poart nu m el e de for m u a ui %a4 e4. Aplic a i e * !ener a &i to&i arborii cu n v * rfuri. 0roble m a se reduc e la gen e r a r e a tuturor func&iilor a' {1,(,...,n+ ( } {1,(,...,n } i det e r mi n a r e a arbor elui cores p u n 2 t o r fiecr ei func&ii. #om gen e r a toat e codurile 0rEffer posibile recursiv, apel * nd proc e d u r a $en er ar e516. proc e d u r e % e n e r a r e * i # b - t e + ; //po+iii e 1!2!...!i' 1 din vector u $ oba a sunt fi7at e8 // com p e t m po+iii e i!...!n' 2.
0rogr a m ul )en erar e' (rbori' cu' n' .arfuri de la sf * r; itul capitolului cure n t gen e r e a 2 to i arborii cu n v * rfuri dat e.
*

13

be%in i" i = n) 1 th e n // codu est e co m p e t det erm in a.arb or e el / e "or 0 # = 1 to n do be%in a [i ] # = 0; % e n e r a r e * i + 1+; en d ; en d ; proc e d u r e d e t e r m i n a . a r b o r e ; // afi"ea + m uc ,ii e arbore ui8 var 1 i# b-t e ; M2# / e t o" b- t e ; //m u i m e a v # rfuri or care au fost de3a e iminat e din arbore MA# / e t o" b-t e ; //m u i m e a v # rfuri or pentr u care trebui e s det er m i n m nodu // ter mina adiace n t be%in M2 # = []; MA # = [a 1 a 2 ... a n) 1 ]; "or i # = 1 to n ) 1 do //det er m i n ce e n' 1 m uc ,ii a e arbore ui be%in //ca cu e+ 9! v # rfu de indice mini m ce :( :; 1 # = 1; ' hil e 1 in MA + M2 do inc*1 +; M2 # = M2 + [1 ]; // 9 est e nodu ter mina de indice mini m cuta t MA # = MA ) [a i ]; 'rit e * 1 a i +; //afi"e + m uc ,ia [9!a i] en d ; en d ; 1. 2 . Arbori cu rd c i n
14

0entru proble m el e n care se impun e o ierarhi2ar e a inform a &iilor ce cores p u n d v*rfurilor arbor elui, astfel nc*t anu mit e v*rfuri s fie subord o n a t e altor a, est e util introdu c e r e a unei noi no&iuni+ arbor e cu rd cin . =rborii cu rd cin sunt o pre2 e n & cotidian . Fiecar e i+a recons tit uit la un mo m e n t dat arbor el e gen e al o gic i, dup cum vom ved e a , cea mai mar e part e a ter m e nilor folosi&i n limba?ul inform a tic deriv de aici. $n alt exe m pl u est e mod ul de orga ni2ar e a comp e ti&iilor sportiv e sau orga nigr a m a unei ntre prind e ri. <n multe alte exe m pl e i ve&i nt * lni pe parcur s ul ace s t ei cr&i. De"i ni 3 ie $n arbore cu rdcin est e o mul&im e finit de noduri care fie est e vid fie + exist un nod special numit rd cin a arbor elui8 +toat e celelalt e noduri sunt parti&ion a t e n n 7 clas e =1 , =( , ..., =n , fiecar e clas fiind un arbor e cu rd cin . Ddcin a arbor elui est e unit prin muc hii de rd cinile arborilor= 1 , =( , ..., =n .

Fig./. Defini&ia est e recursiv , orice nod al unui arbor e fiind rd cin a unui sub ar b o r e . 5 obs erv m c aleg * n d ntr+ un mod arbitrar un v*rf drep t rd cin , orice graf neorien t a t conex i fr cicluri est e un arbor e cu rd cin n sens ul defini&iei de mai sus. =rborii =1 , =( , ..., =n se nu m e s c sub ar b o rii rd cinii, nu m r ul de sub a r b o ri nevi2i ai unui nod fiind nu mit grad ul nodului res p e c tiv. De exe m pl u,

15

Fig. A. 5 obs erv m c defini&ia conduc e la o ierarhi2ar e a nodurilor arbor elui ' + consid e r m c rd cin a r se situe a 2 pe nivelul 7. + dac not m cu r 1 , r ( , ..., r n res p e c tiv rd cinile arborilor =1 , =( , ..., =n , nodurile r 1 , r ( , ..., r n vor cons titui nivelul 1 n arbor e, .a. m. d. 6odurile r 1 , r ( , ..., r n , se num e s c fiii nodului rd cin , iar rd cin a r repr e2int print e e nodurilor r 1 , r ( , ..., r n , rd cin a fiind singur ul nod din arbor e care nu are print e. Fiecr ei muc hii din arbor e i put e m asocia o orient a r e de la print e spre fiu. <n plus, fiii nodurilor de pe nivelul i7, vor cons titui nivelul i +1. 6ivelul maxi m din arbor e va cons titui -n i m e a " ad # ncim e a % arbor elui res p e c tiv. 5 obs erv m c orice nod x poat e fi atins din rd cin pe un dru m unic. )rice nod 1 care se gs e t e pe dru m ul unic de la r la x se nu m e t e asce n d e n t " str m o " % al lui x. Dac 1 est e un asce n d e n t al lui x, atu nci x se num e t e desc e n d e n t al lui 1. Kai exact, to&i desc e n d e n &ii unui nod x sunt nodurile din sub a r b o r el e cu rd cin a x. Dac un nod nu are desc e n d e n & i el se num e t e nod ter mina sau frun+ . Dou noduri care au acela i print e se nu m e s c frai . <n exe m pl ul de mai sus, - est e un asc e n d e n t al lui B. 6odurile ., /, ,, B, C sunt noduri ter min al e. 6odurile B, C sunt fra&i, iar desc e n d e n & ii nodului - sunt nodurile A, B, C. 1. 4 . Arbori bin ari ) clas foart e import a n t de arbori cu rd cin o cons titui e arborii binari. $n arbor e binar est e un arbor e
16

cu rd cin n care grad ul oricrui v*rf est e cel mult egal cu doi. 0ute m defini recursiv arborii binari astfel ' De"i ni 3 ie $n arbore binar est e un arbor e care fie est e vid, fie cons t dintr+ un nod rd cin i doi arbori binari dis?unc&i numi&i sub ar b o r el e st* n g, resp e c tiv sub a r b o r el e .

Fig. B. =1 = sub ar b o r e st* n g8 =( = sub ar b o r e drep t. 5e face o distinc&ie clar ntre sub ar b o r el e drep t i cel st*n g. Dac sub a r b o r el e st*n g est e nevid, rd cin a lui se num e t e fiul st*n g al rd cinii. =nalog, dac sub a r b o r el e drept est e nevid, rd cin a lui se nu m e t e fiul drept al rd cinii. De exe m pl u,

Fig. C. sunt doi arbori binari distinc&i. <n continu a r e , ter min ologia folosit la arbori cu rd cin se va aplica i la arbori binari. #om deos e bi ntre arborii binari c*te v a clas e speciale' 1. (rbori binari strici sunt arborii binari n care orice v*rf are grad ul 2ero "est e ter min al % sau doi "are exac t doi fii%. De exe m pl u, arborii din figura C nu sunt arbori binari stric&i "nodurile ( i / av* n d un singur fiu%, dar

17

Fig. 17. est e un arbor e binar strict. (. (rbori binari p ini sunt arbori binari care au ( 9 +1 v*rfuri dispus e pe nivelurile 7, 1, ... , 9+1, astfel nc*t pe fiecar e nivel i se gs e s c ( i v*rfuri. De exe m pl u, arbor el e binar plin cu nl&im e a ( est e'

Fig. 11. , . (rborii binari com p e i sunt arbori binari care se ob&in dintr+ un arbor e binar plin prin elimin ar e a din dre a p t a ctr e st*n g a a unor noduri de pe ultimul nivel. Kai exac t, pentr u a construi un arbor e binar compl e t cu n noduri, det er mi n m 9 astfel nc*t ( 9 n : ( 9 +1 9 = [log ( n ]. 4onstr ui m arbor el e binar plin cu ( 9 +1 +1 noduri i 9 +1 9 +1 elimin m de pe ultimul nivel nodurile ( +1, ( +(, ..., n +1. De exe m pl u ! arbor el e binar compl e t cu . v*rfuri se ob&in e prin elimin ar e a v * rfurilor A i / din arbor el e binar plin cu nl&im e a ( '

Fig. 1(. - . (rbori binari de$ e n e r a i + sunt arbori binari cu n v*rfuri dispu s e pe n niveluri. De exe m pl u,
18

Fig. 1,. . . (rbori binari ec,i ibrai + sunt arbori binari n care, pentr u orice nod, num r ul nodurilor din sub a r b o r el e drep t i num r ul nodurilor din sub ar b o r el e st*n g difer cu cel mult o unita t e . De exe m pl u,

Fig. 1-. 1. 4 . 1 Propri e t i ale arb orilor bin ari Propri e t a t e a 1. 6umr ul maxi m de noduri de pe nivelul i al unui arbor e binar est e ( i. De m o n s tr a i e: #om proce d a prin induc&ie dup nu m r ul nivelului. 0"7% 0e nivelul i = 7 se gs e t e un singur nod "r dcin a%. 0"9% 0resu p u n e m c num r ul maxi m de noduri de pe nivelul 9 est e ( 9. 0"9 +1% #om de m o n s t r a c pe nivelul 9 +1 sunt cel mult ( 9 +1 noduri. 0e nivelul 9 +1 se gs e s c fiii nodurilor de pe nivelul 9. Din ipote2 a inductiv, pe nivelul 9 se gs e s c cel mult ( 9 noduri, iar fiecar e nod poat e ave a cel mult doi fii, deci pe nivelul 9 +1 se gs e s c cel mult ( *( 9 = ( 9 +1 noduri. >.E.D.
19

Propri e t a t e a 2. 6umr ul maxi m de noduri ntr+ un arbor e cu nl&im e a h est e ( h +1 +1. De m o n s tr a i e: 6umr ul maxi m de noduri ntr+ un arbor e cu nl&im e a h se ob&in e atunci c*nd fiecar e nivel i est e plin, deci, confor m propo2i&iei ant e rio ar e , con&in e ( i noduri. 6umr ul maxi m de noduri ntr+ un arbor e cu nl&im e a h va fi' h i h+1
i= 0

2 = 2

>.E.D. Propri e t a t e a 4. <n orice arbor e binar nevid cu n 7 noduri ter min al e exist n 7 +1 noduri de grad (. De m o n s tr a i e ' 6ot m cu n 7 nu m r ul de noduri ter min al e, cu n 1 nu m r ul de noduri de grad 1 ; i cu n ( nu m r ul de noduri de grad (. Deci, num r ul tot al de noduri n =n 7 +n 1 +n (. Dac num r m muc hiile dintr+ un arbor e binar, obs erv m c fiecar e nod, cu exce p &i a rd cinii, are o singur muchie orient a t spre el. 6ot*n d m num r ul de muc hii ob&ine m n = m +1. Dar orice muchie provin e de la un nod de grad 1 sau (, re2ult c m = n 1 +(n ( . Din n 7 +n 1 +n ( = n i n 1 +(n ( = n+ 1 n ( = n 7 +1. >.E.D. Propri e t a t e a 5. $n arbor e cu n v*rfuri are nl&im e a cel pu&in eg al cu [log ( n ]. De m o n s tr a i e: <n ca2ul cel mai favor a bil, nodurile sunt dispu s e pe niveluri astfel nc*t fiecar e nivel s fie plin, cu exce p &i a, eve n t u al , a ultimului nivel. Deci arbor el e binar cu n noduri de nl&im e minim est e arbor el e binar compl e t cu n v*rfuri, care, din mod ul de cons tr uc &i e, are nl&im e a [log ( n ]. >.E.D. Propri e t a t e a 6.
20

Definim lungim e a dru m u rilor intern e "L% ca fiind su m a lungimilor dru m u rilor de la rd cin la noduri net er mi n al e "inter n e % i lungim e a dru m u rilor ext er n e "E% ca fiind su m a lungimilor dru m u rilor de la rd cin la noduri ter min al e "frun2 sau ext er n e %. <ntr+ un arbor e binar cu n noduri intern e , E = L+(n. De m o n s tr a i e: #om proc e d a prin induc&ie dup n, num r ul nodurilor intern e . 0"7% <ntr+ un arbor e cu 7 noduri intern e "vid sau form a t nu m ai din rd cin % E = L = 7. 0"n+ 1% 0res u p u n e m c ntr+ un arbor e binar =n+1 , cu n+ 1 noduri intern e , are loc rela&ia E n+1 = Ln+1 +("n+ 1%. 0"n% #om de mo n s t r a c ntr+ un arbor e binar =n , cu n noduri intern e , are loc rela&ia E n = Ln +(n. Fie =n un arbor e binar cu n noduri intern e . Exist n =n un nod intern x care are drept fii dou noduri ter min al e. <ndep r t * n d din =n fiii nodului x, nodul x se transfor m n nod ter min al, deci ob&ine m un arbor e =n-1 cu n+ 1 noduri intern e . Din propo2i&ia inductiv re2ult c n arbor el e = n+ 1, E n+1 = Ln+1 +("n+ 1%. Dac not m cu d, lungim e a dru m ului de la rd cin la nodurile elimin a t e , ob&in e m rela&iile ' E n = E n+1 +(d+ "d+ 1% "n =n nodurile elimina t e sunt ter min al e, dar nodul x nu, lungim e a dru m ul ui de la rd cin la x fiind d+ 1%. Ln = Ln+1 +"d+ 1% "n =n nodul x est e intern%. Deci E n = Ln+1 +("n+ 1% +d +1 = Ln +d +1 +(n+ ( +d +1 = Ln +(n. >.E.D. 1. 5 . 7epr e , e n t a r e a arb oril or 1.-.1. <epre + e n t ar e a cu referin e desc e n d e n t e 0entru fiecar e nod din arbor e vom re&ine inform a &i a asocia t nodului i referin& e ctr e fiii si. Dac pres u p u n e m c grad ul oricrui nod est e cel mult egal cu n, put e m repr e2 e n t a referin& el e spre fii printr+ un vector cu n comp o n e n t e .
21

5truct ur a unui nod va fi ' Lnform a &i Fiu 1 Fiu ( ...... e

Fiu n

Declar a r e a aces t ei struct u ri n sec&iun e a t4p e n limba?ul 0asc al est e ' =rbore = M6 o d=rbor e8 6od=rbor e = record Lnf' JipLnfor m a &i e8 Fiu' arra1 [1..6rKaxFii ] of =rbore8 end8 <ntr+ o astfel de repr e2 e n t a r e risipa de me m o ri e est e foart e mar e, n fiecar e nod aloc m me m o ri e pentr u nu m r ul maxi m de referin& e ctr e fii. <n plus, num r ul maxi m de fii est e, n gen e r al, necu n o s c u t . =cest nea?u n s ar put e a fi elimina t folosind n locul vectorului de referin& e "cu nu m r a priori fixat de comp o n e n t e % o list simplu nln&uit n care s re&in e m to&i fiii nodului resp e c tiv. Declar a r e a ace s t ei struct u ri n sec&iun e a t1pe n limba?ul 0ascal va fi ' NistaFii = MFiu8 Fiu = record F' =rbore8 $rm' NistaFii8 end8 =rbore = M6 o d =rbore8 6od=rbor e = record Lnf' JipLnfor m a &i e8 Def' NistaFii8 end8 De exe m pl u, arbor el e din figura de mai ?os,

22

Fig. 1.. va fi repr e2 e n t a t prin '

Fig.1/. Dac arbor el e est e repr e2 e n t a t prin referin& e desc e n d e n t e , atunci est e suficient s re&in e m rd cin a arbor elui pentr u a ave a acce s la toat e nodurile ace s t ui a. 1.4.2. <epre + e n t ar e a cu referin e asce n d e n t e <n ace a s t repr e2 e n t a r e , pentr u fiecar e nod din graf re&ine m pe l*ng inform a &i a afere n t , o leg t u r spre nodul print e. =rbore = M6 o d=rbor e8 6od=rbor e = record Lnf' JipLnform a &i e 8 Jata' =rbore8 end8 Kai simplu, pute m utili2a doi vectori n care pentr u fiecar e nod re&ine m inform a &i a, res p e c tiv nodul print e. =ceas t repr e2 e n t a r e est e mai comp a c t , dar pentr u a ave a acce s la toat e nodurile arbor elui treb ui e s re&ine m toat e nodurile ter min al e. De exe m pl u, pentr u arbor el e din figura 1. vom ob&in e repr e2 e n t a r e a ' Lnf a b c d e f g h i ? 9 l m Jat a a a b b c d d d e e h a ) astfel de repr e2 e n t a r e est e util pentr u repr e2 e n t a r e a mul&imilor dis?unct e cu a?utorul arborilor i
23

o re2olvar e eficient a proble m el o r de reuniu n e a dou mul&imi i de det e r mi n a r e a mul&imii creia i apar &in e un ele m e n t dat. 1.4.3. <epre + e n t ar e a =iu'=rate . 0entru fiecar e nod re&ine m fiul cel mai din st* n g a i frat el e lui din dre a p t a cel mai apro pi a t. =rbore = M6 o d=rbor e8 6od=rbor e = record Lnf' JipLnfor m a &i e8 Fiu5t, FrateDr' =rbore8 end8 0entru arbor el e din figura 1. ob&in e m '

Fig. 1A. Dotind ace a s t repr e2 e n t a r e cu -. n sens ul acelor de ceas o r nic, ob&in e m un arbor e binar n care pentr u fiecar e nod, fiul drept est e fratele lui din dre a p t a cel mai apro pi a t. <ntre cele dou grafuri exist o cores p o n d e n & biunivoc . Figura de mai ?os ilustre a 2 ace a s t a tran sfor m a r e .

Fig. 1B. 1. 6 . 7epr e , e n t a r e a


24

arb orilor

bin ari

1...1. <epre + e n t ar e a -n nuit. <n ace a s t repr e2 e n t a r e , pentr u fiecar e nod re&ine m , pe l*ng inform a &i a asociat nodului, rd cin a sub a r b o r el ui st*n g, rd cin a sub ar b o r el ui drept i dac est e nec e s a r , print el e nodului resp e c tiv. =rboreOinar = M6 o d=rbor eOin ar8 6od=rbor eOin ar = record c' JipLnfor m a &i e8 st, dr, print e' =rboreOin ar8 end8 =rborele binar va fi referit prin inter m e d i ul rd cinii. 1...( . <epre + e n t ar e a secv e n ia . 0entru fiecar e nod re&in e m ntr+ un vector doar inform a &i a asociat nodului, leg t u rile dintr e noduri fiind implicite. =cest tip de repr e2 e n t a r e est e conv e n a bil pentr u arbori binari compl e &i. 0entru ace a s t a , vom nu m e r o t a nodurile astfel ' + rd cin a est e num e r o t a t cu 1. + cele ( i noduri de pe nivelul i sunt num e r o t a t e ( i, ( i+1, ... , ( i+1 +1 de la st*n g a la dre a p t a "i @ 7%. + pe ultimul nivel nodurile sunt nu m e r o t a t e p*n la n, num r ul de noduri din arbor e . =ceas t nu m e r o t a r e ne per mit e s ded uc e m leg t u rile exist e n t e ntre nodurile arbor elui. Prop o ,i i e $rm t o a r el e rela&iii sunt valabile pentr u orice nod x din arbor e ' 1. fiul st* n g al lui x est e dac (x n st( x) = (x, nu exist, dac (x@n (. fiul drept al lui x est e x+1, dac 2 x+1 n dr( x) = 2 nu exist, dac 2 x+1> n ,. print el e lui x est e L x/ 2 O , dac x@1 M P Q tata( x) = N nu exist, dac x=1

R | S | T

25

De m o n s tr a i e ' #om de mo n s t r a rela&iile 1. i (. prin induc&ie dup nu m r ul nodului x, rela&ia ,. fiind o cons e cin& imedia t a rela&iiilor 1. i (. 0"1% Dac x = 1, st"1% = ( = (x, dac ( n dr"1% = , = (x +1, dac , n. 0"x% 0resu p u n e m c rela&iile 1. i (. sunt ndeplinite pentr u nodul x. 0"x +1% Demo n s t r m rela&iile 1. i (. pentr u x +1, adic +2, dac (x+2 n st( x + 1) = (x nu exist, dac (x+2 @n i 2 x + 3 , dac 2 x + 3 n dr( x + 1) = nu exist, dac 2 x+3> n Fiul st* n g al nodului x +1 est e prec e d a t de fiul drep t al nodului x. Din ipote2 a inductiv , dr"x% = (x +1, deci st"x +1% = (x +1 +1 = (x +(, evide n t , dac (x +( n. Fiul drep t al lui x +1 est e succ e s o r ul lui st"x +1%, deci dr"x +1% = (x +( +1 = (x +,, dac (x +, n. >.E.D. Deci pentr u arbori binari comple &i ace a s t repr e2 e n t a r e est e ideal, nefiind nece s a r dec * t me m o r a r e a inform a &iilor nodurilor. 5e poat e utili2a repr e2 e n t a r e a secv e n &i al i pentr u arbori binari oarec a r e , compl e t * n d arbor el e cu noduri fictive p*n la un arbor e binar comple t, dar n aces t ca2 o mar e part e din vector ul ce con&in e inform a &iile nodurilor rm * n e neutili2at . <n plus, ca orice repr e2 e n t a r e secv e n &i al , est e inad e c v a t pentr u inser ri i ter g e ri de noduri.

{ {

1. 8 . 9p er a ii el e m e n t a r e

p e arb ori bin ari

<n cele ce urm e a 2 , vom utili2a nln&uit a arborilor binari. 1./.1. %rearea unui arbore binar.
*

repr e2 e n t a r e a

0rogr a m ul >pera & ii'pe' (rbori' ;inari imple m e n t e a 2 oper a arbori binari pre2 e n t a t e . 26

iile pe

=lgorit mul de crear e depind e n mod es e n &i al de tipul arbor elui binar pe care dorim s+ l construi m. #om pre2 e n t a o proce d u r de cre ar e a unui arbor e binar echilibrat, al&i algorit mi de crear e fiind pre2 e n t a &i n capitolele urm t o a r e . 0entru a crea un arbor e binar echilibrat cu n v*rfuri se sta bile t e un v*rf rd cin , se cons tr ui e t e un arbor e binar echilibra t cu [nP( ] v*rfuri ca sub a r b o r e st*n g i un arbor e binar echilibrat cu n+ 1+ [nP( ] v*rfuri ca sub ar b o r e drep t. Dac n est e par num r ul nodurilor din sub a r b o r el e st*n g va fi cu o unitat e mai mar e dec * t nu m r ul nodurilor din sub a r b o r el e drep t, altfel cei doi sub a r b o ri au un nu m r eg al de noduri. "un c ti o n :rear e Ar b o r e 2 i n a r; c h ili br a t * n # b- t e + # Arbor e 2 i n a r ; // funcia -ntoarc e adres a rdcinii unui arbore binar ec,i ibrat cu n //v#rfuri var rad# Arbor e 2i n a r; be%in i" n = & th e n //arbore e est e vid :rear e A r b o r e 2 i n a r; c h ili b r a t # = nil el / e be%in n e ' *r a d + < /a oc +on de m e m o ri e pentr u rdcina arbore ui rea d l n * r a d = . $ n " + ; //cites c infor m a ia rdcinii arbore ui // cree + subarbor e e st # n$! apoi ce drept rad = . St # = :rear e A r b o r e 2 i n a r; c h ili b r a t * n div 2+; rad = . Dr # = :rear e Ar b o r e 2 i n a r; c h ili br a t * n ) n div 2 )1 +; :rear e A r b o r e 2 i n a r; c h ili b r a t # = rad en d en d ; 1./.(. 0arcur$er e a arbori or binari 0arcurg e rile sunt cele mai frecve n t utili2at e oper a &ii pe arbori. = parcur g e un arbor e nse a m n a vi2ita fiecar e nod al arbor elui o singur dat , n scopul
27

prelucr rii inform a &i ei asociat e nodului. Exist mai multe posibilit&i de parcur g e r e a arborilor+ n ad* n ci m e "preordin e, inordin e, postor din e% sau pe niveluri, dar n toat e ca2urile at * t arbor el e, c * t i sub a r b o rii sunt prelucr a &i n acela i mod. a6 0arcur$ eri e -n ad#nci m e <n toat e cele trei tipuri de parcur g e r e n ad * ncime se vi2ite a2 mai nt*i sub ar b o r el e st* n g, apoi sub ar b o r el e drep t. Difere n & a const n po2i&ia rd cinii fa& de cei doi sub a r b o ri. Fie scris e recursiv, fie itera tiv, proc e d u rile de parcur g e r e n ad* n ci m e nec e sit o stiv. 0entru a parcur g e un arbor e binar n preor din e, se vi2ite a2 mai nt*i rd cin a, se parcur g e n preordin e sub a r b o r el e st*n g, apoi se parcur g e n preordin e sub a r b o r el e drep t. proc e d u r e Pre or d i n e * r a d # Arbor e 2i n a r + ; be%in i" rad nil th e n be%in 'rit e * r a d = . i n " + ; //vi+ite+ rdcina Pre or d i n e * r a d = . / t + ; //parcur$ subarbor e e st # n$ Pre or d i n e * r a d = . d r + ; //parcur$ subarbor e e drept en d ; en d ; 0entru a parcur g e n inordin e un arbor e binar, se parcur g e n inordin e sub a r b o r el e st* n g, se vi2ite a2 rad cin a, apoi se parcur g e n inordin e sub ar b o r el e drept. proc e d u r e $nordi n e * r a d # Arbor e 2 i n a r + ; be%in i" rad nil th e n be%in $nordi n e * r a d = . / t + ; 'rit e * r a d = . i n " + ; $nordi n e * r a d = . d r + ; en d ; en d ; 0entru a parcur g e n postor din e un arbor e binar, se parcur g e n postordin e sub ar b o r el e st* n g, apoi cel drept,
28

apoi se vi2ite a2 rd cin a. proc e d u r e Po / t o r d i n e * r a d # Arbor e 2 i n a r + ; be%in i" rad nil th e n be%in Po / t o r d i n e * r a d = . / t + ; Po / t o r d i n e * r a d = . d r + ; 'rit e * r a d = . i n " + ; en d ; en d ; 0entru a n&eleg e mai bine oper a &i a de parcur g e r e , vom pre2 e n t a i o variant iterativ de parcurg e r e n inordin e a unui arbor e binar. 0entru a simula recursia vom folosi o stiv 5 la care vom ad u g a sau ter g e ele m e n t e n acela i mod ca n proce d u r a recursiv. Stiv = =N o d S t i v ; Nod S t i v = rec or d $n"# Arbor e 2i n a r ; >rm# Stiv ; en d ; proc e d u r e $nordi n e$ t e r a t i v *rad# Arbor e 2i n a r +; // proce d ur a parcur$ e iterativ -n inordine arbore e cu rdcina rad var S p# Stiv ; Nod:ur e n t # Arbor e 2i n a r ; be%in S # = nil; Nod: ur e n t # = rad; rep e a t ' hil e Nod:ur e n t nil do be%in //adau $ nodu curen t -n stiva S ne' *p + p = .$ n " # = Nod:ur e n t ; p = .> r m # = S; S # = p; //rdcina subarbor e ui st#n$ devin e nod curent
29

Nod: ur e n t # = Nod:ur e n t = . S t i" S nil th e n //e7tra $ e un e e m e n t din stiv be%in p # = S; S # = S = .> r m ; 'rit e * p = . i n " + Nod:ur e n t # = p = .$ n " = . D r di/ p o / e * p + ; << e iber e a + +ona de m e m o ri e a ui p until *S = nil+ an d *No d: ur e n t = nil+ en d ; >bser va i e Fiecar e nod din arbor e est e plas a t i ters din stiv o singur dat , deci timpul nec e s a r parcur g e rii inordin e est e de )"n%. 5pa&iul suplime n t a r nec e s a r depind e de nl&im e a arbor elui, deci n ca2ul cel mai defavor a bil est e de )"n%. b6 0arcur$er e a pe nive uri 5e vi2ite a2 nt*i rd cin a, apoi fiul st* n g al rd cinii, apoi cel drept i se continu n aces t mod vi2it*n d nodurile de pe fiecar e nivel de la st*n g a la dre a p t a . 0entru a reali2a aces t mod de parcur g e r e , vom utili2a o coad , pe care o ini&iali2 m cu rd cin a arbor elui i din care, la fiecar e pas, vom extr a g e un nod, l vi2it m i inser m n coad fii si, dac ace ti a exist . :oad = =N o d : o a d ; Nod: o a d = rec or d $n"# Arbor e 2i n a r ; >rm# :oad ; en d ; proc e d u r e Parc u r % e r e P e N i v e l u r i *rad# Arbor e 2i n a r + //proce d ur a parcur$ e pe nive uri arbore e cu rdcina rad var : S": p# :oad ; be%in
30

i" rad nil th e n be%in arbore ui

//arbor e e est e nevid n e ' *: + // iniia i+e+ coada cu rdcina

:=.$n" # = rad; :=.>r m # = nil; S": # = :; ' hil e : nil do // coada nu est e vid be%in p # = :; 'rit e * p = . $ n " + ; i" p = .$ n " = . S t nil th e n be%in //adau $ fiu st#n $ -n coad ne' * ?+; ? = .$ n " # = p = .$ n " = . S t ; ? = . >r m # = nil; S": = .> r m # = ?; S": # = ?; en d ; i" p = .$ n " = . D r nil th e n be%in //adau $ fiu drept -n coad ne' * ?+; ? = .$ n " # = p = .$ n " = . D r; ? = . >r m # = nil; S": = .> r m # = ?; S": # = ?; en d ; : # = :=.>rm //e7tra$ din coad nodu p di/ p o / e * p + ; en d en d en d ; >bser va i e Kai nt*i am inser a t n coad fiii nodului ce urm e a 2 a fi vi2itat i apoi am extr a s efectiv nodul resp e c tiv din coad , pentr u a evita inser a r e a unui nod
31

ntrQo coad vid. 1.6.3. Deter m in ar e a -n imii unui arbore . Dac arbor el e est e vid, vom consid e r a c nl&im e a sa est e Q1, astfel put e m calcula nl&im e a arbor elui ca fiind maxi m ul dintre nl&imile sub ar b o rilor rd cinii plus nivelul pe care se afl rd cin a. "un c ti o n @nli m e *rad# Arbor e 2i n a r + # int e % e r ; // funcia -ntoarc e -n im e a arbore ui binar cu rdcina rad be%in i" rad = nil th e n // arbore vid @nli m e # = A1 el / e @nli m e # = m a B* @nli m e * r a d = . / t + @nli m e * r a d = . d r + + +1 en d 8 =m pres u p u s cunos c u t func&ia max, care ntoarc e cel mai mar e dintre cele dou argu m e n t e ale sale. 1.6.4. ?$a itat e a a doi arbori binari . 5pun e m c doi arbori binari snt egali dac au ace e a i struct ur i con&in acele a i inform a &ii n nodurile cores p o n d e n t e . "un c ti o n ;%ali *rad 1 rad 2# Arbor e 2i n a r +# bo ol e a n ; //funcia -ntoarce true dac arborii cu rdcini e rad1! // resp e c tiv rad2 sunt e$a i! a tfe -ntoarce fa se be%in ;%ali # = *rad 1 = nil+ an d *rad 2 = nil+ //a m bii sunt vi+i sau or *rad 1 nil+ an d *rad 2 nil+ // am bii sunt nevi+i "i an d *rad 1 = . c = rad 2 = . c + //au ace e a "i infor m a i e -n rdcin an d ;%ali*r a d 1 = . S t rad 2 = . S t + //subarborii st # n$i e$a i an d ;%ali*ra d 1 = . D r rad 2 = . D r + // subarborii drep & i e$a i en d ;
32

Aplic a i e * 5e dau secv e n & el e ob&inut e prin parcur g e rile n preordin e i n inordin e ale unui arbor e binar. 4onstr ui&i arbor el e binar cores p u n 2 t o r. De exe m pl u, fie =,O,4,D,E,F,!,R+ parcurg e r e a n preordin e i 4,O,=,E,D,!,F,R+ parcur g e r e a n inordin e. =nali2nd parcur g e r e a n preordin e , dedu c e m c nodul = est e rd cin a. De as e m e n i, an ali2* n d parcur g e r e a n inordin e, dedu c e m c nodurile 4, O vor cons titui arbor el e st*n g, iar D, E, !, F, R sub ar b o r el e drept. 0entru a det e r mi n a struct ur a sub ar b o r elui st* n g, resp e c tiv a sub a r b o r el ui drep t, proc e d m an alog' din parcur g e r e a n preor din e dedu c e m c O est e rd cin a sub a r b o r el ui st*n g, iar din parcurg e r e a n inordin e dedu c e m c 4 est e fiul st*n g al lui O. <n mod similar, pentr u sub a r b o r el e drept dedu c e m din parcur g e r e a n preordin e c D est e rd cin , iar din parcur g e r e a n inordin e c sub ar b o r el e st*n g al lui D est e form a t num ai din nodul E, iar sub ar b o r el e drept al lui D din nodurile F, !, R. 0roce d e ul se rep e t pn cnd ob&ine m ntreg arbor el e. 5uccesiu n e a oper a &iilor est e ilustra t n figura

1C'

0rogr a m ul %onstruc & ie' (rbore' ;inar' cu' Sec v e n & e e' 0reordin e' 2nordine' Date gen e r e a 2 un arbor e binar pentr u care se cunos c parc ur g e ril e n preordi n e ; i inordin e.
*

33

Fig. 1C. Prop o ,i i e 5ucce siu nile de noduri ob&inut e prin parcur g e rile n inordin e i n preordin e ale unui arbor e binar defines c n mod unic struct u r a arbor elui. De m o n s tr a i e ' #om proc e d a prin induc&ie comple t dup nu m r ul de noduri. 0"1% Dac arbor el e are un singur nod, rd cin a, afirma &i a est e evide n t . 0"n% 0resu p u n e m c pentr u 9 {1,(,... ,n } afirma &i a est e ad ev r a t , adic pentr u orice pere c h e de secv e n & e inordin eQpr e o r din e de lungim e 9, arbor el e binar cores p u n 2 t o r est e unic. 0"n +1% 5 de mo n s t r m c orice per ec h e de secv e n & e preordin e+ inordin e de lungim e n +1 det er mi n n mod unic un arbor e binar. 5 consid e r m o pere c h e de secv e n & e preordin e+ inordin e de lungim e n +1. 0rimul nod din parcur g e r e a n preordin e est e n mod nec e s a r rd cin a arbor elui, celelalt e n noduri fiind distribuit e n sub a r b o ri' toat e nodurile situ a t e n st* n g a rd cinii n parcurg e r e a n inordin e vor constitui sub ar b o r el e st* n g, nodurile situa t e n dre a p t a rd cinii n parcur g e r e a inordin e vor constitui sub a r b o r el e drep t. )b&ine m dou per ec hi de secv e n & e preor din e+ inordin e de lungim e cel mult n, care din ipote2 a inductiv , det er mi n n mod unic sub a r b o r el e st*n g, resp e c tiv cel drept i n cons e cin & , cum rd cin a est e n mod unic det er mi n a t , dedu c e m c pere c h e a de
34

secv e n & e preordin e+ inordin e de lungim e n +1 det er mi n n mod unic un arbor e binar cu n noduri. >.E.D. #om descrie o func&ie recursiv %onstr(rb , care det er mi n arbor el e binar cores p u n 2 t o r unei per ec hi de secv e n & e preordin e+ inordin e dat e. 0entru simplificar e, vom consid e r a c nodurile arbor elui sunt num e r o t a t e n preordin e de la 1 la n. =stfel, est e suficient s re&ine m ntr+ un vector global i indicii v*rfurilor n ordine a n care au fost atins e n inordin e. Lni&ial, apel m 4onstr=rb"1,1,n%. "un c ti o n :on / trAr b *rad /t dr+# Arbor e 2i n a r ; //functia -ntoarc e rdcina arbore ui unic det er m i n a t de parcur$ eri e //inordine' preordin e //rad est e indice e rdcinii arbore ui //st "i dr sunt imite e -ntre care se $s e " t e parcur$ er e a inordin e a //arbore ui -n vector u i var r# Arbor e 2i n a r; $Po,7 a d # b- t e ; be%in n e ' *r +; //a oc m e m o ri e pentr u rdcina arbore ui r=. c # = rad; //rein e m drept infor m a i e nu m r u asociat nodu ui $Po,7 a d # = /t; // det er m i n po+iia rdcinii arbore ui -n parcur$ er e a inordin e ' hil e i [$Po,7 a d ] rad do inc*$P o ,7 a d + ; i" $Po,7 a d = /t th e n //subar bor e e st # n$ est e vid r./ t = # = nil el / e // i@ st.. 20o+<ad' 1A con & ine subarbor e e st # n$ r./ t = # = :on / trAr b *r a d +1 /t $Po,7 a d ) 1+; i" $Po,7 a d = dr th e n //subar bor e e drept est e vid r.dr = # =nil el / e // i@ 20o+<ad +1.. drA con & ine subarbor e e drept r.dr = #= :on / trAr b *r a d +$Po,7 a d ) /t +1
35

$Po,7 a d +1 dr+; // -n subarbor e e st#n$ au fost 20o+<ad' st +1 v#rfuri en d ; 1. C . Nu m r a r e a arb oril or bin ari * 5e pun e proble m a det e r mi n rii nu m r ului de arbori binari distinc&i cu n noduri, fc*n d abs tr a c &i e, binen& el e s de nu m e r o t a r e a nodurilor. 0entru n =7 sau n =1 exist un singur arbor e binar. Dac n =(, exist doi arbori binari distinc&i.

Fig. (7. 0entru n =,, exist . astfel de arbori.

6ot m cu b n binari distinc&i cu n noduri. Evident, b 7 = 1. 0entru n @ 7 arborii sunt form a &i din rd cin i doi sub a r b o ri cu i, res p e c tiv n+ i+1 noduri "7 i : n%.

Fig. (1. nu m r ul arborilor

R | 1, | dac\ n=1 | bn = S | n1 | bibni1, dac\ n>1 | | i=0 T

0entru a ob&ine nu m r ul arborilor binari distinc&i cu n


0rogr a m ul Nu m ar' (rbori' ;inari' Distinc & i afi ; ea2 num rul arborilor binari distinc i cu n v * rfuri dat e.
*

36

noduri est e suficient s re2olv m recur e n & . 5 consid e r m func&ia B( x) = bnxn


n 0

ace a s t

rela&ie

de

Din rela&ia de recur e n & , nmul&ind ambii me m b ri cu x n ,ob&in e m ' bnx = x (bixi )(bn i 1 xn i1 )
n i= 0 n1

5um * nd dup n 1, ob&ine m '

bnxn = x (bixi )(bn i 1 xn i1 )


n1 n1 i= 0

n1

)b&ine m O"x%+ b 7 = xFO ( "x% xO ( "x% + O"x% +1 = 7. De2olv*n d ace a s t ecu a &i e de grad LL ob&in e m ' 1 1 1 4x 1 B( x) = B( x) = (1 (1 4 x) 2 ) 2x 2x De2volt * nd bino mi al "1+ -x% 1P( , ob&in e m ' 1 1 1 ( 1)...( n+1) 1 2 2 2 B( x) = (1 ( 4 x) n ) n! 2x n 0 B( x) =
( 1)...( n+1) 1 2 2 2 ( 1) n+1 2 2 n xn n! 2 x n1 1 1 1

B( x) =
n1

1 1 1 ( 1)...( n+1) 2 2 2 n!

( 1) n+1 2 2 n1 xn1 )

6ot * nd n+ 1 cu m, ob&in e m ' B( x) =


1 1 1 ( 1)...( m) 2 2 2 ( m+1)!

( 1) m2 2 m+1 xm)

m 0

4um b n est e coeficien t ul lui x n n O"x% ob&in e m 1 1 1 ( 1)... ( n) 2 bn = ( 1) n 2 2 n+1 2 2


( n + 1)!

bn = ( 1) n 2 2 n+1

1 (1 2)(1 2 2)...(1 2 n) 2 n+1 ( n + 1)!


37

bn = 2 n bn =

(2 n 1)(2( n 1) 1)...(2 1) ( n + 1)!

1 (2 n n!)(2 n 1)(2( n 1) 1)...(2 1) n+ 1 n! n! (2 n)! 1 n bn = n1 +1 n!n! bn = n+1 C2 n 6umr ul arborilor binari distinc&i cu n v * rfuri va fi aproxim a tiv bn = O

F I G H J K
4 n 3/2 n

>bser va ii 1. =m de m o n s t r a t c fiecr ui arbor e binar i cores p u n d e o singur pere c h e de secv e n & e preor din e+ inordin e. 4onsid er * n d nodurile nu m e r o t a t e n preor din e, re2ult c arborii binari sunt defini&i de per m u t rile inordin e distinct e "per m u t rile distinct e ce se pot ob&ine trec * n d num e r el e 1,(,...,n ntr+ o stiv i ter g * n d u+ le n toat e mod urile posibile%. Deci num r ul per m u t rilor inordin e de n ele m e n t e est e 1 n n+1 C2 n (. ) proble m care are n mod surprin2 t o r leg t u r cu cele prec e d e n t e est e calculul produ s ului a n +1 ma trici, K7 ,K 1 ,...,K n . 4um nmul&ire a ma tricilor est e asociativ , am dori s tim n c*t e mod uri put e m calcula produ s ul K7 K1 ... Kn . 0entru n = 1 exist o singur posibilitat e . 0entru n = ( exist dou posibilit&i' "K 7 K1 % K( sau K7 "K1 K( %. 0entru n = , exist cinci posibilit&i ' ""K 7 K1 % K( % K, 8 "K7 K1 % "K( K, %8 "K7 "K1 K( %% K, 8 K7 ""K 1 K( % K, %8 K7 "K1 "K( K, %%. 6ot m cu 0"n% nu m r ul de mod uri distinct e n care
38

put e m calcula produ s ul K7 K1 ... Kn . 0rodus ul K7 K1 ... Kn poat e fi mpr&it ntr+ un produ s de dou produ s e de matrici ' "K 7 K1 ... K9 %"K 9 +1 ... Kn %. =cest ei asocieri i se poat e pun e n cores p o n d e n & un arbor e binar'

Fig. ((.

Deci nu m r ul de par a n t e 2 ri posibile pentr u produ s ul a n +1 ma trici coincide cu nu m r ul arborilor binari distinc&i cu n noduri. 1. D . Pd u ri De"i ni i e ) pdur e est e dis?unc&i. De exe m pl u, un ans a m bl u de n 7 arbori

R 1, dac n = 1 | P( n) = S n1 | P( k )P( n k 1), dac n@1 | k=0 T

Fig. (,. <nde p r t * nd rd cin a din orice arbor e ob&ine m o pdur e forma t din sub ar b o rii rd cinii. )rice pd ur e poat e fi repr e2 e n t a t ca un arbor e binar. 0entru ace a s t a , tran sfor m m arborii din care est e cons tituit pdur e a n arbori binari, utili2 * nd repr e2 e n t a r e a fiu+ frate. =poi cons tr ui m arbor el e binar cores p u n 2 t o r pd urii, utili2 * nd c * mpul frat e al rd cinii fiecrui arbor e .
39

De exe m pl u, pentr u pd ur e a din figura (- arbor el e binar asociat est e

Fig. (-. De"i ni i e Fie =1 , =( , ..., =n arborii unei pduri. =tunci arbor el e binar cores p u n 2 t o r pdurii, ;5( 1 ! ( 2 ! ...! ( n 6 est e' 1.vid, dac n = 78 (.ar e rd cin a egal cu rd cin a lui =1 , sub a r b o r el e st * ng est e arbor el e cores p u n 2 t o r pd urii forma t din sub ar b o rii lui =1 , iar sub ar b o r el e drept est e arbor el e binar cores p u n 2 t o r pd urii form a t din arborii =( , ..., =n . )per a &iile de parcurg e r e a unei pduri se reduc la parcur g e r e a arbor elui cores p u n 2 t o r.

Fig. (.. 1. E . Probl e m e re,ol v a t e 1. 9 . 1 . Ar b o r i bin a r i m- po n d e r a i '> impiada de infor m a tic fa+a 3ude e a n ! 2a"i 1BB5' $n arbor e binar strict se num e t e m' pond er a t dac fiecar e nod i are asocia t o pond e r e p [i], cu valori ntre 1
40

; i m+ 1, astfel nc * t pentr u orice nod ter min al t su m a pond e rilor din nodurile aflat e pe dru m ul de la rd cin la nodul t est e egal cu m. Definim 0 n,m "J% pond e r e a unui arbor e binar strict cu n noduri ter min al e m+ pond e r a t ca fiind su m a pond e rilor ata a t e nodurilor din J. 5 se scrie un progr a m care pentr u n si m da&i det e r mi n un arbor e binar strict m+ pond e r a t cu n noduri ter min al e JF astfel nc * t' 0 n,m "JF% =max {0 n,m "J% J arbor e binar strict m+ pond e r a t cu n noduri ter min al e I So uie: 0entru ca proble m a s ad mit solu&ie treb ui e ca pentr u orice dru m de la rd cin la un nod ter min al s put e m asocia nodurilor pond e ri 1. <n l&ime a minim a unui arbor e cu n v * rfuri ter min al e est e h =[log ( n ]. 0entru a asocia pond e ri est e nec e s a r ca m, sum a pond e rilor v * rfurilor de pe orice dru m de la rd cin la un v * rf ter min al, s fie cel pu&in egal cu [log ( n ]+1. Deci condi&ia nec e s a r pentr u ca proble m a s ad mit solu&ie est e m [ o$ 2 n ]+1 . >bser va ii 1. Fie J un arbor e binar strict cu n v * rfuri ter min al e. 4onstr ui m o m+ pond e r a r e p o a arbor elui J astfel' +asocie m fiecrui nod interior pond e r e a 1. +deo ar e c e su m a pond e rilor de pe orice dru m de la rd cin la un v * rf ter min al treb ui e s fie egal cu m, asocie m fiecrui nod ter min al o pond e r e eg al cu m+ lungim e a dru m ului de la rd cin la nodul ter min al resp e c tiv. Demo n s t r m c p o est e o m+ pond e r a r e maxi m al pentr u arbor el e J. 5 consid e r m p o m+ pond e r a r e oarec a r e pentr u arbor el e J i x un v * rf interior astfel nc * t p [x ]@ 1. Dac exist mai mult e astfel de noduri, consid e r m un v * rf de pe un nivel de rang minim. Fie 1 i 2 cei doi fii ai lui x. 4onstr ui m o alt m+ pond e r a r e p S a lui J astfel' pS [x ] = 18 pS [1 ] = p [1 ]+p [x ]+18 pS [2 ] = p [2 ]+p [x ]+1. =tunci 0S"J% = 0"J%+p [x ]+p [1 ]+p [2 ]+pSTxU +pS [1 ]+pS [2 ]
41

0S"J% G 0"J% +p [x ]+p [1 ]+p [2 ]+1V p [1 ]+p [x ]+1 + p [2 ]+p [x ]+ 1 0S"J% = 0"J% +p [x ]+1 0S"J% @ 0"J%. Kodific * nd succe siv pond e rile nodurilor interioar e de sus n ?os, ob&ine m dup un nu m r finit de pai m+ pond e r a r e a p o , n care toat e v * rfurile interio ar e au pond e r e a 1. Deci 0 o "J% 0"J%, p o m+ pond e r a r e a arbor elui J (. )bs erv a &i a 1. ofer o mod alit a t e de m+ pond e r a r e optim al a unui arbor e binar strict dat. Dm * ne s det e r mi n m , pentr u n i m da&i, arbor el e binar strict cu n v * rfuri ter min al e care maxi mi2e a 2 0 n,m "J%. Demo n s t r m c arbor el e cut a t JF est e arbor el e binar comple t. Fie J un arbor e binar strict cu n v * rfuri ter min al e care nu est e compl e t i fie x i 1 dou v * rfuri ter min al e fii ai aceluia i nod interior, situa t e pe nivelul i, iar 2 un nod ter min al situ a t pe nivelul ?, astfel nc * t i+? @ 1.

Fig. (/. Kut m nodurile x i 1 de pe nivelul i pe nivelul ? +1, ca fii ai nodului 2 i repo n d e r m nodurile. 0"JS% = 0"J%+("m+ i+1%+ 1+ "m+ ?+1% +("m+ ?% +m+ i+( +1 0"JS% = 0"J% +i+?+1 @ 0"J%. =plic m succe siv ace a s t tran sfor m a r e p * n c * nd ob&in e m un arbor e binar compl e t. Deci 0"JF% @ 0"J%, J arbor e binar strict. >.E.D. <epre + e n t ar e a infor m a ii or =rborele cut a t fiind compl e t, pentr u imple m e n t a r e aleg e m repr e2 e n t a r e a secv e n &i al .
program arbore_m_ponderat;
uses crt;

42

const NMaxVfT=20; NMaxVf=2*NMaxVfT-1; type Vf=0..NMaxVf; arbore_ponderat=array[Vf] of !ar n"#"n#!e$%Vf; &% ord; p%arbore_ponderat;

ord;

procedure af#sare; const pst=1'; pdr=2(; pp=)2; !ar #%Vf; be*#n r#te$n+,Nodu$ -#u stan* -#u drept for #%=1 to n-1 do be*#n r#te+#/; *otoxy+pst" 0erey/; r#te+2*#/; *otoxy+pdr" 0erey/; r#te+2*#11/; *otoxy+pp" 0erey/; r#te$n+1/; end; for #%=n to 2*n-1 do be*#n r#te+#/; *otoxy+pp" 0erey/; r#te$n+p[#]/; end end;

.ondere,/;

be*#n c$rscr; r#te+,n=,/;read$n+n/; r#te+,&=,/;read$n+&/; #f &2trunc+$n+n/3$n+2//11 t0en r#te$n+,Nu ex#sta so$ut#e4,/ e$se be*#n for #%=1 to n-1 do p[#]%=1; 5nodur#$e #nter#oare au ponderea 16 for #%=n to 2*n-1 do be*#n n#!e$%=trunc+$n+#/3$n+2//; p[#]%=&-n#!e$; 5nodur#$e ter&#na$e au ponderea e*a$a cu &-nu&aru$ n#!e$u$u# pe care sunt s#tuate6 end; af#sare end; read$n end.

43

1. 9 . 2 . Int e r c l a s a r e a op t i m a l a n iruri or d o n a t e Fie n secv e n & e 5 1 ,5 ( ,...,5 n de lungimi resp e c tiv N1 ,N( ,...,N n , ordon a t e ned e s c r e s c t o r . 5 se interclas e 2 e cele n secv e n & e . So uie ' 1. 6ot m cu m N1 +N( +... +Nn . ) prima solu&ie ar fi s select m la fiecar e pas articolul cu cheia cea mai mic i s+ l plas m n irul re2ult a t. 0entru select a r e a minimului ar fi nec e s a r e n+ 1 comp a r a &ii, deci algorit m ul ar fi de )"n W m%. (. #om utili2a un arbor e de selec&ie. De"i ni 3 ie 6umim arbore de se ecie un arbor e binar compl e t n care fiecar e nod est e cel mai mic dintre fiii si. >bser va i e Fiecar e nod din arbor e are asocia t ca valoar e minimul valorilor nodurilor din sub ar b o r el e corep u n 2 t o r. #om construi arbor el e de selec&ie n mod botto m+ up, apoi la fiecar e pas select m minimul, care est e rd cin a arbor elui i restr uc t u r m arbor el e. 4onstr uc &i a arbor elui de selec&ie est e de )"n%, restruc t u r a r e a arbor elui, care se rep e t de m ori, de )"log n%. Deci algorit m ul va fi de )"m log n%. <epre + e n t ar e a infor m a ii or =rborele de selec&ie fiind compl e t, vom utili2a repr e2 e n t a r e a secv e n &i al .
program interclasare_optimala;
const NMax7ec!=20; 8*Max7ec!=90; type :nd=1..8*Max7ec!; 7ec!=1..NMax7ec!; Nod=1..2*NMax7ec!; ;rbore=array[Nod] of #nte*er; !ar $%array[7ec!] of :nd;5$un*#&#$e sec!ente$or6 n%7ec!; 5nu&aru$ de sec!ente6 &"<% ord;5&=nu&aru$ tota$ de e$e&ente6 o%array[1..8*Max7ec!*NMax7ec!] of #nte*er; 5re=u$tatu$ #nterc$asar##6 s%array[7ec!":nd] of #nte*er;5sec!ente$e6 ;%;rbore;5arbore$e de se$ect#e6 >%array[7ec!] of :nd;5#nd#c## curent# #n sec!ente6

44

procedure c#t#re; !ar f%text; #%7ec!; >%:nd; be*#n ass#*n+f",#nt.#n,/; reset+f/; read$n+f"n/; for #%=1 to n do read+f"$[#]/; read$n+f/; for #%=1 to n do be*#n &%=&1$[#]; s[#"$[#]11]%=Max:nt; for >%=1 to $[#] do read+f"s[#">]/; read$n+f/; end; c$ose+f/; end; procedure ?onstr;rb7e$; !ar #%Nod; be*#n 5construct#a arbore$u# de se$ect#e6 for #%=n to 2*n-1 do ;[#]%=s[#-n11"1]; 5#n#t#a$#=area nodur#$or ter&#na$e6 for #%=n-1 do nto 1 do #f ;[2*#]2;[2*#11] t0en ;[#]%=;[2*#] e$se ;[#]%=;[2*#11]; 5#n#t#a$#=e= !a$or#$e #nd#c#$or #n sec!ente6 for #%=1 to n do >[#]%=1; end; procedure restructurare; !ar #"tata"frate%Nod; be*#n 5deter&#n sec!enta corespun=atoare nodu$u# e$#&#nat6 #%=1; 0#$e #2=n-1 do #f ;[#]=;[2*#] t0en #%=2*# e$se #%=2*#11; 5# este nodu$ ter&#na$ corespun=ator sec!ente# d#n care a& $uat un e$e&ent6 #nc+>[#-n11]/; ;[#]%=s[#-n11">[#-n11]]; 5restaura& !a$or#$e nodur#$or de pe dru&u$ de $a nodu$ # $a radac#na6 0#$e #@1 do be*#n tata%=# d#! 2; #f #=2*tata t0en frate%=2*tata11

45

e$se frate%=2*tata; #f ;[#]@;[frate] t0en ;[tata]%=;[frate] e$se ;[tata]%=;[#]; #%=tata; end; end; procedure af#sare; !ar #% ord; be*#n r#te$n+,Ae=u$tatu$ #nterc$asar##% ,/; for #%=1 to & do r#te+o[#]", ,/; r#te$n; read$n end; be*#n 5pro*ra& pr#nc#pa$6 c#t#re; ?onstr;rb7e$; for <%=1 to & do be*#n o[<]%=;[1];5e$e&entu$ &#n#&6 restructurare; end; af#sare; end.

1. 9 . 3 .

re p r e z e n t a r e

ar b o r il o r

bin a r e

s t ri c i 'prob e m propu s de Coria )eor$ e s c u ! ).2. nr.1D/1 B B 3' Fie urm t o r ul arbor e binar strict

Fig. (A. 4odific m dru m u rile de la rd cin la nodurile ter min al e marc * nd cu 7 fiecar e depla s a r e la st * nga i cu 1 fiecar e depla s a r e la dre a p t a . 4oncat e n * nd codificrile n preor din e, ob&ine m o repr e2 e n t a r e a arborilor binari stric&i.
46

0entru exe m pl ul 7771 7 7 7 1 7 1 7 1 1 1 .

din

figura

(A

codificar e a

est e

0rob e m Data fiind s, repr e2 e n t a r e a unui arbor e binar strict ob&inut prin conc a t e n a r e a n preor din e a codificrilor dru m u rilor de la rd cin la nodurile ter min al e, gen e r a &i arbor el e cores p u n 2 t o r. So uie ' Fie x, 1 dou noduri ter min al e, situ a t e pe nivelul maxi m in arbor e, fii ai aceluia i nod t. Dac not m p secv e n & a ce codific dru m ul de la rd cin la t, atunci irul s are forma p7p1 . Deter mi n m p astfel nc * t s = p7p1 , p fiind cea mai lung secv e n & cu ace a s t propriet a t e . De exe m pl u, pentr u codificar e a de mai sus p = 717. 0ute m cons tr ui astfel un dru m de la rd cin a arbor elui la dou noduri ter min al e fra&i.

Fig. (B. Elimin m din s secv e n & a 7p1, cee a ce cores p u n d e elimin rii din arbor e a dou noduri ter min al e fii ai aceluiai nod. )b&ine m , de exe m pl u, s = 7771 7 7 1 1 1 . =m redus proble m a la gen e r a r e a unui arbor e cu un nod ter min al mai pu&in, pe care l vom supr a p u n e pes t e dru m ul gen e r a t ant erior .
program Generare_Arbore_Binar_Strict;
uses crt; type ;rbore=BNod;rbore; Nod;rbore= record st"dr%;rbore end; !ar s%str#n*; f%text;

47

n" po=" NrNod" $*" NrTest% byte; ;" T% ;rbore; procedure procesare+!ar po=" $*% byte/; 5deter&#na cea &a# $un*a subsec!enta p a $u# s astfe$ #ncat s=p0p1 ; po= -po=#t#a de #nceput a $u# p; $* -$un*#&ea $u# p6 !ar #">% byte; be*#n $*%=0; po=%=1; #%=1; 0#$e #2=n-2*$*-1 do be*#n 5caut o sec!enta p care sa #nceapa pe po=#t#a # de $un*#&e &a# &are ca $*6 >%=$*11; 0#$e #12*>2n do be*#n 0#$e +#12*>2n/ and +s[#1>]2@,0,/ do #nc+>/; #f #12*>2n t0en #f +copy+s"#">/=copy+s"#1>11">// and +s[#12*>11]=,1,/ t0en be*#n $*%=>; po=%=# end; #nc+>/; end; #nc+#/ end; end; procedure ?onstrCru&; !ar D" x% ;rbore; *ata% boo$ean; #% byte; be*#n D%=;; #%=po=; 5constru#esc dru&u$ de $a radac#na arbore$u# $a nodu$ tata a$ nodur#$or ter&#na$e ce ur&ea=a sa $e a*at #n arbore" suprapunand e!entua$ peste arbore$e de>a constru#t6 *ata%=fa$se;5*ata de!#ne true cand a& ter&#nat de parcurs port#unea de dru& de>a constru#ta #n arbore6 0#$e not *ata and +#2po=1$*/ do #f s[#]=,0, t0en #f DB.st2@n#$ t0en be*#n D%=DB.st; #nc+#/ end e$se *ata%=true e$se #f DB.dr2@n#$ t0en be*#n D%=DB.dr; #nc+#/

48

end e$se *ata%=true; 0#$e #2po=1$* do be*#n ne +x/; xB.st%=n#$; xB.dr%=n#$; #f s[#]=,0, t0en DB.st%=x e$se DB.dr%=x; D%=x; #nc+#/ end; 5a*at doua nodur# ter&#na$e" f## a# nodu$u# D6 ne +x/; xB.st%=n#$; xB.dr%=n#$; #f DB.st=n#$ t0en DB.st%=x; ne +x/; xB.st%=n#$; xB.dr%=n#$; #f DB.dr=n#$ t0en DB.dr%=x; end; procedure scr#e+x% ;rbore; n#!" st" dr% byte/; !ar po=% byte; be*#n #f x2@n#$ t0en be*#n po=%=+st1dr/d#! 2; *otoxy+po="n#!/; r#te+NrNod/;#nc+NrNod/; scr#e+xB.st" n#!12" st" po=-1/; scr#e+xB.dr" n#!12" po=11" dr/; end; end; procedure af#sare; be*#n c$rscr; #nc+NrTest/; NrNod%=1; r#te$n+,Testu$ nr. ," NrTest",%,/; scr#e+;"2"1"(0/; read$n; end; be*#n 5pro*ra& pr#nc#pa$6 ass#*n+f",a.#n,/; 5f#s#eru$ de #ntrare cont#ne &a# &u$te setur# de date de test6 reset+f/; 0#$e not see<eof+f/ do be*#n read$n+f"s/; ne +;/;5*enera& arbore$e corespun=ator sec!ente# s !#de6 ;B.st%=n#$; ;B.dr%=n#$;

49

repeat n%=$en*t0+s/; procesare+po="$*/; ?onstrCru&; de$ete+s"po=1$*"$*12/; unt#$ n=0; af#sare; end; read$n end.

1.1 0 . ;Berciii 1. Demo n s t r a &i c n orice graf ! = "#, $% conex, $ #+1. (. Demo n s t r a &i c n orice arbor e exist cel pu&in dou v * rfuri ter min al e. ,. 4alcula&i num r ul arborilor cu n v*rfuri i secv e n & a grad elor v*rfurilor d 1 ,d ( ,...,d n "d i 1, i{1, (, ..., n }, d 1 +d ( +... +d n = (n+ (%. 5crie&i un progr a m de gen e r a r e a tuturor arborilor cu secv e n & a grad elor dat . -. 4alcula&i num r ul arborilor cu n v*rfuri, dintr e care p ter min al e. .. 5ecve n & el e ob&inu t e prin parcurg e rile n postordin e i n inordin e ale unui arbor e binar define s c n mod unic arbor el e X Dac da, scrie&i un algorit m de gen e r a r e a arbor elui binar cores p u n 2 tor. =cee a i proble m pentr u parcur g e rile n preordin e i n postordin e, res p e c tiv parcur g e r e a n inordin e i parcur g e r e a pe niveluri. /. !en er a &i to&i arborii binari distinc&i cu n v*rfuri. A. 5crie&i o func&ie de duplicar e a unui arbor e binar. B. 5crie&i o func&ie de cut a r e a unei valori de tipul inform a &i ei asocia t e nodurilor ntr+ un arbor e binar. =nali2a&i comple xit a t e a func&iei. C. 5crie&i o proce d u r iterativ de parcur g e r e n preordin e a unui arbor e binar. 17. 5crie&i o proce d u r itera tiv de parcur g e r e n postordin e a unui arbor e binar. 11. 5crie&i o func&ie de ter g e r e a unui arbor e binar. 1(.5crie&i un progr a m care s parcurg un arbor e oarec a r e n repr e2 e n t a r e a fiu+ frat e pe niveluri. 1,. Definim grad ul unui arbor e cu rd cin ca fiind
50

grad ul maxi m al nodurilor sale. Fie un arbor e cu grad ul 9 i nl&im e a h. 4are est e nu m r ul maxi m de noduri din aces t arbor e X Depr e2 e n t m fiecar e nod al arbor elui printr+ un articol ce con&in e inform a &i a asociat nodului i 9 point eri spre rd cinile sub a r b o rilor ' =rbore = = 6od=rbor e8 6od=rbor e = record c' JipLnf8 leg' arra1 [1..9 ] of =rbore8 end8 a%. 5crie&i o func&ie de crear e a unui arbor e echilibra t de grad 9. b%. Descrie&i algorit m ul de parcur g e r e pe niveluri i n ad* n ci m e a unui arbor e de grad 9. c%. 5crie&i o func&ie care s det er mi n e nl&im e a unui arbor e de grad 9. d%. 5crie&i o func&ie care s test e 2 e eg alita t e a a doi arbori de grad 9. 1-. 5crie&i o func&ie care s det er mi n e num r ul de noduri ter min al e ale unui arbor e binar. 1.. 5crie&i un algorit m care, dat fiind un arbor e binar, schimb fiul st* n g cu fiul drep t, pentr u orice nod din arbor e. De exe m pl u '

Fig. (C. 1/. Demo n s t r a &i c orice arbor e binar est e (+ colorabil. 1A. Fie 0 un poligon conve x. ) diago n al est e un seg m e n t ce une t e dou v*rfuri nea di a c e n t e . 6umim trian$ u ari+ar e a poligonului conve x 0 o mul&im e de diago n al e care mpar t poligon ul n triung hiuri dis?unct e . 4alcula&i num r ul triang ul ari2 rilor posibile pentr u un poligon conv ex cu n v*rfuri.
51

1B. 5crie&i o func&ie care s verifice dac un arbor e binar est e strict. 1C. 4alcula&i nu m r ul arborilor binari de nl&im e h. (7. 5crie&i un progr a m care s cons tr uia s c arbor el e binar cores p u n 2 t o r pdurii form a t e din arborii =1 , =( , ..., =n i parcur g e &i arbor el e n preor din e, inordin e, postordin e. (1. Fie 0 o p dure, arborii comp o n e n i fiind repr e2 e n t a i prin referin e asce n d e n t e . 5crie i un algorit m care s det er mi n e pentr u oricar e dou v * rfuri din p dure cel mai apro pi a t asc e n d e n t comu n , dac aces t a exist . =nali2a i comple xit a t e a algorit m ul ui. ((. Y0roble m a Y telefonis t elor ) re& e a telefonic form a t din n centr al e nu m e r o t a t e de la 1 la n, are forma unui arbor e oar ec a r e . Jelefonis t a de la centr al a 9, 1 9 n, care a intrat n pos e si a unei inform a &ii import a n t e , ard e de ner b d a r e s+ o mpr t e s c tuturor coleg elor ei. Ztiind c fiecar e telefonist poat e vorbi la un mo m e n t dat doar cu una dintr e vecinele ei, c o convorbire dure a 2 un minut i c fiecar e telefonist , dup ce a intrat n pos e si a inform a &i ei se grb e t e s o comu nic e celorlalte vecin e ale ei care n+ au aflat+ o nc, s se det er mi n e succe siu n e a prop a g rii n timp a inform a &i ei i timpul minim nec e s a r ca toat e telefonis t el e s cuno a s c vest e a pornit de la centr al a 9.

52

An e B F
program Constructie_arbore_cu_secventa_gradelor_data;
const NMaxVf = 20; type Vf = 1..NMaxVf; !ar a" d% array[Vf] of Vf; n" #" VfT" VfNt% Vf; s% byte; fout% text; procedure c#t#re; !ar #% Vf; f#n% text; be*#n ass#*n+f#n" ,*rade.#n,/; reset+f#n/; read$n+f#n" n/; for # %= 1 to n do read+f#n" d[#]/; read$n+f#n/; c$ose+f#n/; end; procedure af#sare; !ar #% Vf; be*#n r#te$n+fout" ,Muc0##$e arbore$u# sunt% ,/; for # %= 1 to n-1 do r#te +fout" ,+," #" ,"," a[#]" ,/ ,/; r#te$n+fout/; end; be*#n c#t#re; ass#*n+fout",*rade.out,/; re r#te+fout/; s %= 0; for # %= 1 to n do s %= s1d[#]; #f s 2@ 2*+n-1/t0en r#te$n+fout",7ec!enta eronata4 7u&a *rade$or trebu#e sa f#e 2+n-1/4,/ e$se for VfT %= 1 to n-1 do be*#n VfNt %= VfT11; 0#$e +VfNt 2 n/ and +d[VfNT] = 1/ do #nc+VfNt/; a[VfT] %= VfNt; dec+d[VfNT]/; end; af#sare; c$ose+fout/; end.

De ex e m pl u, pentr u fi; ierul de intrar e' A 1 1 1 ( ( ( ,

fi; ierul de ie ; ire va con ine' Kuchiile arbor el ui sunt' "1,-% "(,.% ",,/% "-,A% ".,A% "/,A%

program Generare_Arbori_cu_n_Varfuri;
const NrMaxVf=10; type Vf = 1..NrMaxVf; ;rbore = array[Vf] of Vf; !ar n% Vf; fout% text; a% ;rbore; Nr;rb% $on*#nt; procedure deter&#na_arbore; !ar ME" M;% set of Vf; #" <% Vf; be*#n #nc+Nr;rb/; r#te+fout" ,;rbore$e nr. ,"Nr;rb", %,/; ME %= []; M; %= []; for # %= 1 to n-1 do M; %= M;1[a[#]]; for # %= 1 to n-1 do be*#n < %= 1; 0#$e < #n M;1ME do #nc+</; ME %= ME1[<]; M; %= M;-[a[#]]; r#te+fout" ,+," <" ,"," a[#]" ,/ ,/; end; r#te$n+fout/; end; procedure *enerare+#% Vf/; !ar >% Vf; be*#n #f # = n-1 t0en deter&#na_arbore e$se for > %= 1 to n do be*#n a[#] %= >; *enerare+#11/; end; end; be*#n 5pro*ra& pr#nc#pa$6 r#te+,:ntroducet# nu&aru$ de !arfur# ,/; read$n+n/; a[n-1] %= n; Nr;rb %= 0; ass#*n+fout",arbn!f.out,/; re r#te+fout/; *enerare+1/; c$ose+fout/; end.

De ex e m pl u, pentr u nG -, con inutul fi; ierului de ie ; ire va fi' =rborel e nr. 1 '"(,1% "1,1% ",,-% =rborel e nr. ( '",,1% "1,(% "(,-% =rborel e nr. , '"(,1% "1,,% ",,-% =rborel e nr. - '"(,1% "1,-% ",,-% =rborel e nr. . '",,(% "(,1% "1,-% =rborel e nr. / '"1,(% "(,(% ",,-% =rborel e nr. A '"1,(% "(,,% ",,-% =rborel e nr. B '"1,(% "(,-% ",,-% =rborel e nr. C '"(,,% ",,1% "1,-% =rborel e nr. 17 '"1,,% ",,(% "(,-% =rborel e nr. 11 '"1,,% "(,,% ",,-% =rborel e nr. 1( '"1,,% "(,-% ",,-% =rborel e nr. 1, '"(,-% ",,1% "1,-% =rborel e nr. 1- '"1,-% ",,(% "(,-% =rborel e nr. 1. '"1,-% "(,,% ",,-% =rborel e nr. 1/ '"1,-% "(,-% ",,-%

program Operatii_pe_arbori_binari;
const NrMaxVf = 20; type Vf = 0..NrMaxVf; ;rboreE#nar = BNod;rboreE#nar; Nod;rboreE#nar = record #nf% c0ar; st" dr% ;rboreE#nar; end; !ar n% Vf; f#n" fout% text; ;% ;rboreE#nar; funct#on ?reare;rbore+x% Vf/% ;rboreE#nar; 5creea=a un arbore b#nar ec0#$#brat cu n !arfur#6 !ar rad% ;rboreE#nar;5radac#na arbore$u# care se crea=a6 be*#n #f x = 0 t0en 5arbore !#d6 ?reare;rbore %= n#$ e$se be*#n ne +rad/;5a$oc &e&or#e pentru radac#na arbore$u#6 read+f#n" radB.#nf/; 5c#tesc #nfor&at#a asoc#ata radac#n##6 radB.st %= ?reare;rbore+x d#! 2/; 5cree= subarbore$e stan*6 radB.dr %= ?reare;rbore+x-x d#! 2 -1/; 5cree= subarbore$e drept6 ?reare;rbore%=rad; end; end;

procedure preord#ne+rad% ;rboreE#nar/; 5parcur*e recurs#! #n preord#ne arbore$e b#nar cu radac#na rad6 be*#n #f rad 2@ n#$ t0en be*#n r#te+fout" radB.#nf/; preord#ne+radB.st/; preord#ne+radB.dr/; end end; procedure postord#ne+rad% ;rboreE#nar/; 5parcur*e recurs#! #n postord#ne arbore$e cu radac#na rad6 be*#n #f rad 2@ n#$ t0en be*#n postord#ne+radB.st/; postord#ne+radB.dr/; r#te+fout" radB.#nf/; end end; procedure #nord#ne_#terat#!+rad% ;rboreE#nar/; 5parcur*e #terat#! #n #nord#ne arbore$e b#nar cu radac#na rad6 type 7t#!a = BNod7t#!a; Nod7t#!a = record #nf% ;rboreE#nar; ur&% 7t#!a end; !ar 7" p% 7t#!a; Nod?urent% ;rboreE#nar; be*#n r#te+fout" ,.arcur*erea #nord#ne% ,/; 7 %= n#$; Nod?urent %= rad; repeat 0#$e Nod?urent 2@ n#$ do be*#n 5#ntroduc #n st#!a nodu$ curent6 ne +p/; pB.#nf %= Nod?urent; pB.ur& %= 7; 7 %= p; Nod?urent %= Nod?urentB.st; end; 5extra*" daca este pos#b#$" un e$e&ent d#n st#!a s# !#=#te= nodu$ d#n arbore corespun=ator6 #f 7 2@ n#$ t0en be*#n p %= 7; 7 %= 7B.ur&; r#te+fout" pB.#nfB.#nf/; Nod?urent %= pB.#nfB.dr; d#spose+p/; end; unt#$ +7 = n#$/ and +Nod?urent = n#$/; r#te$n+fout/; end;

procedure parcur*ere_pe_n#!e$ur#+rad% ;rboreE#nar/; 5parcur*e pe n#!e$ur# arbore$e b#nar cu radac#na rad6 type ?oada = BNod?oada; Nod?oada = record #nf% ;rboreE#nar; ur&% ?oada end; !ar :nc?" 7f?" p" D% ?oada; be*#n r#te+fout" ,.arcur*erea pe n#!e$ur#% ,/; #f rad 2@ n#$ t0en be*#n 5#n#t#a$#=e= coada cu radac#na arbore$u#6 ne +:nc?/; :nc?B.#nf %= rad; :nc?B.ur& %= n#$; 7f? %= :nc?; 0#$e :nc? 2@ n#$ do be*#n p %= :nc?; r#te+fout" pB.#nfB.#nf/; 5!#=#te= nodu$ d#n arbore corespun=ator $u# p6 #f pB.#nfB.st 2@ n#$ t0en 5#nsere= #n coada f#u$ stan* a$ nodu$u# !#=#tat6 be*#n ne +D/; DB.#nf %= pB.#nfB.st; DB.ur& %= n#$; 7f?B.ur& %= D; 7f? %= D end; #f pB.#nfB.dr 2@ n#$ t0en 5#nsere= #n coada f#u$ drept a$ nodu$u# !#=#tat6 be*#n ne +D/; DB.#nf %= pB.#nfB.dr; DB.ur& %= n#$; 7f?B.ur& %= D; 7f? %= D end; 5extra* efect#! d#n coada nodu$ p6 :nc? %= :nc?B.ur&; d#spose+p/ end; end; r#te$n+fout/ end; funct#on &ax+a" b% #nte*er/% #nte*er; be*#n #f a @ b t0en &ax %= a e$se &ax %= b end; funct#on #na$t#&e+rad% ;rboreE#nar/% #nte*er; 5#ntoarce #na$t#&ea arbore$u# b#nar cu radac#na rad6 be*#n #f rad = n#$ t0en 5arbore$e este !#d6 #na$t#&e %= -1 e$se #na$t#&e %= &ax+#na$t#&e+radB.st/" #na$t#&e+radB.dr//11; end;

be*#n 5pro*ra& pr#nc#pa$6 ass#*n+f#n",opb#n.#n,/; reset+f#n/; ass#*n+fout",opb#n.out,/; re r#te+fout/; read$n+f#n"n/; ;%=?reare;rbore+n/; c$ose+f#n/; r#te+fout",.arcur*erea preord#ne% ,/; preord#ne+;/; r#te$n+fout/; r#te+fout",.arcur*erea postord#ne% ,/; postord#ne+;/; r#te$n+fout/; #nord#ne_#terat#!+;/; parcur*ere_pe_n#!e$ur#+;/; r#te$n+fout" ,:na$t#&ea arbore$u# este% ," #na$t#&e+;//; c$ose+fout/; end.

program Constructie_Arbore_Binar; const NrMaxVf = 20; type Vf = 0..NrMaxVf; ;rboreE#nar = BNod;rboreE#nar; Nod;rboreE#nar = record #nf% Vf; st" dr% ;rboreE#nar; end; .arcur*ere = array[Vf] of Vf; !ar ;% ;rboreE#nar; #% .arcur*ere;5parcur*erea #nord#ne6 n% Vf;5nu&aru$ de !arfur# d#n arbore6 fout% text; funct#on ?onstr;rb+rad" st" dr% Vf/% ;rboreE#nar; 5funct#a #ntoarce un adresa radac#n## arbore$u# b#nar cu radac#na rad; st"dr repre=#nta $#&#te$e #ntre care se *aseste parcur*erea #nord#ne a arbore$u# #n !ectoru$ #6 !ar r% ;rboreE#nar; :.o=Aad% Vf; be*#n ne +r/; rB.#nf %= rad; 5deter&#n po=#t#a radac#n## #n parcur*erea #nord#ne6 :.o=Aad %= st; 0#$e #[:.o=Aad] 2@ rad do #nc+:.o=Aad/; #f :.o=Aad = st t0en 5subarbore$e stan* este !#d6 rB.st %= n#$ e$se 5#[st..:.o=Aad-1] const#tu#e parcur*erea #nord#ne a subarbore$u# stan*" cu radac#na rad116 rB.st %= ?onstr;rb+rad11"st":.o=Aad-1/; #f :.o=Aad = dr t0en 5subarbore$e drept este !#d6 rB.dr %= n#$ e$se 5#[:.o=Aad11..dr] const#tu#e parcur*erea #nord#ne a subarbore$u# drept" cu radac#na rad1:.o=Aad-st11"

deoarece #n subarbore$e stan* sunt :.o=Aad-st11 !arfur#6 rB.dr %= ?onstr;rb+rad1:.o=Aad-st11":.o=Aad11"dr/; ?onstr;rb %= r; end; procedure ?#t#re; !ar <% Vf; f#n% text; be*#n ass#*n+f#n",p#.#n,/; reset+f#n/; read$n+f#n"n/; for < %= 1 to n do read+f#n" #[<]/; read$n+f#n/; c$ose+f#n/; end; procedure preord#ne+rad% ;rboreE#nar/; 5parcur*e recurs#! #n preord#ne arbore$e b#nar cu radac#na rad6 be*#n r#te+fout" radB.#nf" ,+,/; #f radB.st 2@ n#$ t0en preord#ne+radB.st/; r#te+fout" ,",/; #f radB.dr 2@ n#$ t0en preord#ne+radB.dr/; r#te+fout" ,/,/; end; procedure ;f#sare;rb; be*#n ass#*n+fout",p#.out,/; re r#te+fout/; #f ; = n#$ t0en r#te+fout" ,;rbore !#d,/ e$se preord#ne+;/; 5af#sea=a repre=entarea cu parante=e a arbore$u#6 r#te$n+fout/; c$ose+fout/; end; be*#n 5pro*ra& pr#nc#pa$6 ?#t#re; #f n @ 0 t0en ; %= ?onstr;rb+1" 1" n/ e$se ; %= n#$; ;f#sare;rb; end.

De ex e m pl u, pentr u fi; ierul de intrar e' 17 , - . ( / 1 B A 17 C fi; ierul de ie ; ire va fi' 1"(",",-",.",%%%,/",%%,A"B",%,C"1 7",%,%%%

5FN1 6

program Numar_Arbori_Binari_Distincti;
!ar NrVf" #% byte; Nr;rb% extended; be*#n r#te+,:ntroducet# nu&aru$ de !arfur# ,/; read$n+NrVf/; Nr;rb %= 1; for # %= 2 to NrVf do Nr;rb %= Nr;rb*+NrVf1#/3#; r#te$n+,Nr. de arbor# b#nar# d#st#nct# cu ,"NrVf",!arfur#% ,/; r#te$n+Nr;rb%90%0/; read$n end.

Вам также может понравиться