Referat Arbore Binar
Mai jos puteti citi fragmente din
Referat Arbore Binar si de asemenea puteti face
Download Referat Arbore binarCiteste fragmente din Referat Arbore Binar
Arbore binar
    Un arbore binar este un arbore orientat în care fiecare vârf
are cel mult doi descendenti, făcându-se însă distincţie clară
între descendentul drept şi descendentul stâng al fiecărui vârf. Se
acceptă şi arborele binar cu 0 vârfuri.
    Arborii binari nu reprezintă cazuri particulare de arbori
orientaţi, decât dacă se face abstracţie de distincţia menţionată
între descendentul drept şi cel stâng al fiecărui vârf.
Într-adevăr dacă un vârf are un singur descendent, această
informaţie este suficientă în cazul unui arbore, dar insuficientă
în cazul unui arbore binar, când trebuie precizat dacă acest
descendent este descendent stâng sau descendent drept.
ÂÂ
                                   ÂÂ
                      ÂÂ
Definire. Reprezentare.
Prezentăm în continuare cîteva modalităţi de definire a arborilor
binari in Haskell.
               data Tree a = Nil | T(Tree a, a, Tree a)
               data Tree a = Nil | T Tree a a Tree a
       Pentru a afişa structurile de date arborescente intr-un
mod similar cu listele sau tipurile de date simple, este necesara
extinderea clasei Show, prin intermediul căreia se realizează
afiÅŸarea datelor la consola.
-- Extinderea clasei Show
instance Show a => Show (Tree a) where
show Nil = "Nil"
show (T(l,n,r)) = " T( " ++ show l ++ ", " ++ show
n ++ ", " ++ show r ++ ") "
      Într-o structură de tip arbore, elementele sunt
structurate pe nivele ; pe primul nivel, numit nivel 0, există un
singur element numit rădăcină, de care sunt legate mai multe elemente
numite fii care formează nivelul 1; de acestea sunt legate elementele
de pe nivelul 2 ÅŸ. a. m. d. ( vezi figura ).
      Un arbore este compus din elementele numite noduri sau
vârfuri şi legăturile dintre acestea. Un nod situat pe un anumit
nivel este nod tată pentru nodurile legate de el, situate pe ivelul
următor, acestea reprezentând fiii săi. Fiecare nod are un singur
tată, cu excepţia rădăcinii care nu are tată. Nodurile fără fii
se numesc noduri terminale sau frunze. Termenii nod tată , fiu sau
frate sunt preluaţi de la arborii genealogici, cu care arborii se
aseamănă foarte mult.
      Arborii, ca structuri dinamice de date, au extrem de multe
aplicaţii în informatică. Deosebit de utilizatăîn aplicaţii este
structura de tip arbore binar. Un arbore binar este un arbore în care
fiecare nod are cel mult doi fii, fiul stâng şi fiul drept (fiul
stâng este legat în stânga tatălui şi cel drept în dreapta ).
Dacă în figură se elimină rădăcina şi legăturile ei, se obţin
doi arbori binari care se numesc subarborii stâng şi drept ai
arborelui iniţial. Arborele binar este, deci, o structură recursivă
de date. Un arbore binar nevid fie se reduce la rădăcină, fie
cuprinde rădăcina şi, cel mult, doi subarbori binari. Un arbore binar
se poate implementa foarte uşor cu ajutorul adreselor de înlănţuire,
fiecare element cuprinzând, în afară de informaţia proriu-zisă
asociată nodului, adresa fiului stâng şi adresa fiului drept, acestea
exprimând legăturile existente între noduri.
Implementarea arborilor binari
    Dacă se recurge la implementarea arborilor prin structuri
dinamice, atunci această constantă se reprezintă prin NIL. Tipul
informaţiilor ataşate nodurilor dintr-un arbore este specific
fiecărei aplicaţii în parte. Din acest motiv, vom considera că
informaţia ataşată fiecărui nod este adrestă indirect prin
intermediul unui pointer. În majoritatea implementărilor şi cei doi
subarbori sunt adresaţi indirect; în funcţie de varianta de
implementare - dinamică sau statică - , adresarea se realizează fie
prin intermediul pointerilor, fie prin intermediul indicilor de tablou.
   Alegem implementarea dinamică cea mai simplă formă de
reprezentare a nodurilor :
Type
  NodPtr =^.Nod ;
  Nod = record
   info: string ;
ÂÂ
   stânga: NodPtr ;
   dreapta: NodPtr ;
end
Var
  rădăcina : NodPtr ;
                                   ÂÂ
                           ÂÂ
Operaţii:
 Operaţiile posibile cu arbori sunt la fel ca în cazul listelor:
ï‚· traversarea arborelui ;
ï‚· inserarea unui nod ;
 căutarea unui nod ;
ï‚· ÅŸtergerea unui nod ;
Traversarea arborelui binar constă în parcurgerea pe rând a nodurilor
în vederea prelucrării informaţiilor ataşate acestora. Traversarea
arborelui presupune vizitarea fiecărui nod o singură dată, operaţie
echivalentă cu o liniarizare a arborelui.
 Există trei modalităţi importante de trvesare a unui arbore binar
:
1.) în preordine : sevizitează rădăcina, apoi tot în preordine se
vizitează nodurile subarborelui stâng şi apoi acelea ale subarborelui
drept.
   Nodurile arborelui din figura 2 vizitate în preordine, sunt :
                         1 2 4 5 3 6 7 8.
2.) în inordine : se viziteză în inordine nodurile subarborelui
stâng, apoi rădăcina şi apoi tot în inordine, nodurile subarborelui
drept.
Nodurile arborelui din figura 2 vizitate în inordine, sunt :
h
h
çÂ¿à ¥ˆá¬ˆÂ Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â 4 5 2 1 6 3 8
7.
3.) în postordine : se viziteză în postordine nodurile subarborelui
stâng, apoi tot în postordine, nodurile subarborelui drept şi, la
sfârşit, rădăcina.
Nodurile arborelui din figura 2, vizitate în postordine, sunt :
                        5 4 2 6 8 7 3 1.
Observaţii :
evident, dacă arborele se reduce la un singur nod, vizitarea acestuia
în preordine, inordine sau postordine presupune parcurgerea acestuia,
deci prelucrarea informaţiilor asociate lui;
cele trei modalităţi de traversare diferă prin, momentul în care se
vizitează rădăcina şi anume, în cazul :
preordinii : se vizitează întâi rădăcina, apoi subarborele stâng
şi după aceea cel drept ( RSD );
inordinii : se vizitează rădăcina, după vizitarea subarborelui
stâng ( SRD );
postordinii : se vizitează rădăcina la sfârşit, după vizitarea
subarboreui stâng şi a celui drept ( SDR);
                                   ÂÂ
 ÂÂ
Parcurgeri (preordine, inordine, postordine).
   Pentru fiecare caz, rezultatul funcţiilor îl constituie lista
nodurilor din arbore într-o anumită ordine.
   Ex. 1. Parcurgerea unui arbore binar in preordine.
                                   ÂÂ
                     preordine
:: Tree a -> [a]
                                   ÂÂ
                                   ÂÂ
    preordine (T(l, n, r)) = [n] ++ preordine l ++ preordine r
                                   ÂÂ
                                   ÂÂ
    preordine Nil = []
   Ex. 2. Parcurgerea unui arbore binar in postordine.
                                   ÂÂ
                            postordine ::
Tree a -> [a]
                                   ÂÂ
                                   ÂÂ
   postordine (T(l, n, r)) = postordine l ++ postordine r ++ [n]
                                   ÂÂ
                                   ÂÂ
   postordine Nil = []
   Ex. 3. Parcurgerea unui arbore binar in inordine.
                                   ÂÂ
                    inordine :: Tree a ->
[a]
                                   ÂÂ
                                   ÂÂ
   inordine (T(l, n, r)) = inordine l ++ [n] ++ inordine r
                                   ÂÂ
                                   ÂÂ
   inordine Nil = []
Arbori binari de căutare.
   Cheile unui arbore binar de căutare satisfac proprietatea
arborelui binar de căutare :
   Fie x un nod dintr-un arbore binar de căutare. Dacă y este un
nod din subarborele stîng al lui x, atunci cheie[y]<=cheie[x]. Dacă y
este un nod din subarborele drept al lui x, atunci cheie[x] <= cheie[y].
       Proprietatea arborelui binar de căutare ne permite să
afişăm toate cheile în ordine crescătoare, parcurgînd nodurile
arborelui în inordine.
   Ex. 4. Săse scrie o funcţie care inserează un nod într-un
arbore binar de căutare.   ÂÂ
searchtree :: Tree Int-> Int -> Tree Int
searchtree (T(l,k,r)) x = if x<=k then (T(searchtree l x, k, r))
else (T(l, k, (searchtree r x)))
searchtree Nil k = (T(Nil,k,Nil))
   Ex. 5. Să se scrie o funcţie care construieşte un arbore binar
de căutare dintr-o lista de chei.
listtree :: [Int] -> Tree Int -> Tree Int
listtree [] Nil = Nil
listtree [] (T(l,n,r)) = (T(l,n,r))
listtree (x:xs) y = listtree xs (searchtree y x)
Concluzie:
După studierea referatului am făcut cunoştinţă cu noţiunea despre
arbore binar, ÅŸi anume definirea acestuia; reprezentarea,;
implementarea. Am făcut cunoştinţă despre metodele de operaţii,
acestea sunt traversarea arborelui, inserarea unui nod, căutarea unui
nod şi ştergerea unui nod; parcurgerile cu arborii binar, iar în
cele din urmă am definit arborele binar de căutare.
Acum ne va fi mai uşor de folosi în cursul de informatică şi
materialul din acest referat ÅŸi deasemenea ne deschide noi orizonturi
în domeniul informaticii.
Bibliografie:
          T. Cormen, C. Leiserson, R. Rivest: Introducere in
algoritmi, Ed. Agora, Tg. Mures, 2000
Arbore binar
Cuprins
HYPERLINK
"http://jukebox.tg-mures.roedu.net/Volumes/cd_educational/CD/STR_DAT/arb
orebinar/arbbinar.htm" l "unu" Teorie generală
HYPERLINK
"http://jukebox.tg-mures.roedu.net/Volumes/cd_educational/CD/STR_DAT/arb
orebinar/arbbinar.htm" l "unu" Generalităţii
HYPERLINK
"http://jukebox.tg-mures.roedu.net/Volumes/cd_educational/CD/STR_DAT/arb
orebinar/arbbinar.htm" l "doi" Definiţia elementelor ce compun
arborele
Reprezentarea
HYPERLINK
"http://jukebox.tg-mures.roedu.net/Volumes/cd_educational/CD/STR_DAT/arb
orebinar/arbbinar.htm" l "trei" Implementarea
HYPERLINK
"http://jukebox.tg-mures.roedu.net/Volumes/cd_educational/CD/STR_DAT/arb
orebinar/arbbinar.htm" l "patru" Operaţii specifice
Parcurgeri
Arbori binar de căutare
ì¥Â@