1 / 21

Pemet e Kerkimit Binar (vazhdim)

Pemet e Kerkimit Binar (vazhdim). Leksion 9. Ne kete leksion do te shohim disa veprime te tjera mbi pemet e kerkimit binar. Rikujtojme nga leksioni i kaluar: type tip_elementi = integer ; peme = ^nyje_peme; nyje_peme = record element : tip_elementi;

tess
Download Presentation

Pemet e Kerkimit Binar (vazhdim)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Pemet e Kerkimit Binar (vazhdim) Leksion 9

  2. Ne kete leksion do te shohim disa veprime te tjera mbi pemet e kerkimit binar. • Rikujtojme nga leksioni i kaluar: type tip_elementi = integer; peme = ^nyje_peme; nyje_peme = record element : tip_elementi; lidhje : array [1..2] of peme; end; tabele_peme = record rrenja : peme; numri : integer; end;

  3. function gjej (t : tabele_peme; var p, q : peme ; var d : integer ; elm : tip_elementi) : boolean ; {gjen vendndodhjen e nyjes se pemes me vlere elm ne pemen t duke ruajtur ne p} {shenjuesin mbi kete nyje peme (ose nil nese ajo nuk ekziston), ne q prindin e p (ose } {nil nese prindi nuk ekziston) dhe ne d kahun e birit (1 nese eshte bir i majte dhe/ose} {2 nese eshte bir i djathte)} var ugjet : boolean; begin ugjet := false; p := t.rrenja; q := nil ; while (not(ugjet) and (p <> nil)) do if p^.element = elm then ugjet := true else begin if p^.element > elm then d := 1 else d := 2; q := p; p := p^.lidhje[d]  end ; gjej := ugjet  end {gjej};

  4. function hiq (var t : tabele_peme; elm : tip_elementi) : boolean; {heq nyjen e pemes me vlere elm ne pemen t (nese nje nyje } { e tille ekziston) dhe ben rregullimet e duhura ne menyre qe } { pema te gezoje perseri vetite e pemeve te kerkimit binar; } { kthen true nese veprimi i heqjes perfundon me sukses dhe } { false ne te kundert } var {p nyja per tu hequr; q prindi i p; r biri i djathte i p; s pasardhesi nderrendor i p} p, q, r, s : peme ; d : integer ; begin {hiq} {inicializimi} p := nil; q := nil; r := nil; s := nil; d := 0;

  5. {gjetja e nyjes kandidate per tu hequr, prindit te saj dhe kahut te zbritjes nga prindi} {nepermejt funksionit gjej} if gjej(t, p, q, d, elm) then begin if p^.lidhje[2] = nilthen {rasti 1 ku p nuk ka bir te djathte} if q <> nilthen q^.lidhje[d] := p^.lidhje[1] else {nese p nuk ka prind atehere p eshte rrenja e pemes} t.rrenja := p^.lidhje[1] ; else begin r := p^.lidhje[2] ; if r^.lidhje[1] = nil then {rasti 2 ku biri i djathte i p nuk ka bir te majte} begin r^.lidhje[1] := p^.lidhje[1]; if q <> nilthen q^.lidhje[d] := r else {nese p nuk ka prind ateher p eshte rrenja e pemes} t.rrenja := r ; end

  6. else {rasti 3 ku biri i djathte i p ka bir te majte} begin {s pasardhesi i p sipas bredhjes nderrendore dhe r prindi i s} s := r^.lidhje[1]; while s^.lidhje[1] <> nil begin r := s; s := r^.lidhje[1] end; r^.lidhje[1] := s^.lidhje[2]; s^.lidhje[1] := p^.lidhje[1]; s^.lidhje[2] := p^.lidhje[2]; if q <> nilthen q^.lidhje[d] := s else {nese p nuk ka prind atehere p eshte rrenja e pemes} t.rrenja := s ; end end; dispose(p) ; t.numri := t.numri – 1 ; hiq := true end else hiq := false; end {hiq};

  7. procedure bredhje_rekursive (var t : tabele_peme); procedure bredhje_nder_rendore_rekursive (p : peme); {bredhje ne elementet e nenpemes p – metoda nderrendore (in-order) rekursive} begin { bredhje_nder_rendore_rekursive } ifnot bosh(p) then begin bredhje_nder_rendore_rekursive (p^.lidhje[1]) ; writeln (p^.element); bredhje_nder_rendore_rekursive (p^.lidhje[2]) ; end end { bredhje_nder_rendore_rekursive }; begin {bredhje_rekursive} bredhje_nder_rendore_rekursive(t.rrenja) end{bredhje_rekursive};

  8. procedure bredhje_iterative (var t : tabele_peme); procedure bredhje_nder_rendore_iterative (p : peme); {bredhje ne elementet e nenpemes p – metoda nderrendore (in-order) iterative} var ps : array [1 . . max_lartesi_BST] of peme; n : peme; h : integer; fund : boolean; begin {bredhje_nder_rendore_iterative} n := p; h :=1; fund := false; whilenot(fund) do begin {while not(fund) do} while n <> nildo begin {while n <> nil do} ps[h] := n; h := h +1; n := n^.lidhje[1] end {while n <> nil do};

  9. if h = 1 then fund := true else begin {else} h := h -1; n := ps[h]; writeln (n^.element); n := n^.lidhje [2]; end {else}; end {while not(fund) do}; end {bredhje_nder_rendore_iterative}; begin {bredhje_iterative} bredhje_nder_rendore_iterative(t.rrenja) end{bredhje_iterative};

  10. procedure shkaterro_BST (var t : tabele_peme); {shkaterron pemen t – metoda e rirregullimit te pemes BST duke i rrotulluar nyjet} {derisa te mos kene nenpeme te majte} var p, q : peme; begin {shkaterro_BST} q := nil; p := t.rrenja; while p<>nildo begin {while p <>nil do} if p^.lidhje[1] = nilthen begin q := p^.lidhje[2]; dispose(p)  end  else begin q  := p^.lidhje[1] ; {q bir i majte i p} p^.lidhje[1]  := q^.lidhje[2] ; {rrotullo djathtas mbi p} q^.lidhje[2]  := p {p asnjehere nuk ka prind} end ; p :=q end {while p <>nil do} end {shkaterro_BST};

  11. Rrotullimet ne Pemet e Kerkimit Binar

  12. function prindi (t : tabele_peme; p : peme) : peme; {kthen prindin e nyjes p ne pemen t ose nil nese ai nuk ekziston (p=rrenja)} var q, n : peme; ugjet : boolean; begin {prindi} ugjet := false; if ((t.rrenja <> nil) and (p<>nil)) then begin {if ((t.rrenja <> nil) and (p<>nil)) then} q := nil; n := t.rrenja ; while (not(ugjet) and (n <> nil)) do if n = p then ugjet := true else begin if n^.element < p^.element then d := 1 else d := 2; q := n ; n := n^.lidhje[d]  end ; end {if ((t.rrenja <> nil) and (p<>nil)) then}; if ugjet then prindi := q else prindi := nil end {prindi};

  13. function rrotullo (var t : tabele_peme; x, y : peme; kahu : integer) : boolean; {kryen rrotullim majtas mbi nyjen x te pemes t nese kahu=1 dhe/ose kryen rrotullim} {djathtas mbi nyjen y te pemes t nese kahu=2; kthen true nese veprimi i rrotullimit} {perfundon me sukses dhe false ne te kundert} var {p prindi i x dhe/ose y; d kahu i zbritjes ne peme me reference madhesie p^.element} p : peme ; d : integer ; begin {rrotullo} if ((t.rrenja<>nil) and (x<>nil) and (y<>nil)) then if kahu=1 then {rrotullo majtas mbi x} begin {rrotullo majtas mbi x} p := prindi(t, x); if p<>nil then begin if p^.lidhje[1]=x then d := 1 else d:= 2; p^.lidhje[d] := y ; end else {ndrysho rrenjen e pemes} t.rrenja := y; x^.lidhje[2] := y^.lidhje[1] ; y^.lidhje[1]  := x ; rrotullo := true; end {rrotullo majtas mbi x}

  14. elseif kahu=2 then {rrotullo djathtas mbi y} begin { rrotullo djathtas mbi y } p := prindi(t, y); if p<>nil then begin if p^.lidhje[1]=y then d := 1 else d:= 2; p^.lidhje[d] := x ; end else {ndrysho rrenjen e pemes} t.rrenja := x; y^.lidhje[1] := x^.lidhje[2] ; x^.lidhje[2]  := y ; rrotullo := true; end {rrotullo djathtas mbi y}; else rrotullo := false; else rrotullo := false; end {rrotullo};

  15. Pyetje???

More Related