Sunteți pe pagina 1din 4

30.06.

2016

Articol09ArboriBinari[CSOpenCourseWare]

Articol09ArboriBinari
Obiective
nurmaparcurgeriiarticolului,studentulvaficapabils:
neleagnoiuneadearboreistructuraunuiarborebinar
construiasc,nlimbajulC++,unarborebinar
realizezeoparcurgereastructuriidedateprinmaimultemoduri
citeascoexpresiematematicisiconstruiascarborelebinarasociat
evaluezeoexpresiematematicdatprintrunarborebinar.

Noiuniteoretice
Noiuneadearbore.Arboribinari
Matematic,unarboreesteungrafneorientatconexaciclic.
ntiinacalculatoarelor,termenuldearboreestefolositpentruadesemnaostructurdedatecare
respectdefiniiademaisus,nsareasociateunnodrdcinioorientarenspresauopusrdcinii.
Arboriisuntfolosiingeneralpentruamodelaoierarhiedeelemente.
Astfel,fiecareelement(nod)poatedeineunnumrdeunulsaumaimulidescendeni,iarnacestcaz
nodulestenumitprintealnodurilordescendente.
Fiecarenodpoateaveaunsingurnodprinte.Unnodfrdescendeniesteunnodterminal,saunod
frunz.
nschimb,existunsingurnodfrprinte,iaracestaestentotdeaunardcinaarborelui(root).
Unarborebinaresteuncazspecialdearbore,ncarefiecarenodpoateaveamaximdoidescendeni:
nodulstng
noduldrept.
nfunciedeelementelecepotfireprezentatennoduriiderestriciileaplicatearborelui,sepotcrea
structuridedatecuproprietideosebite:heapuri,arboriAVL,arborirounegru,arboriSplayimulte
altele.Opartedinacestestructurivorfistudiatelacursinlaboratoareleviitoare.
nacestarticolnevomconcentraasuprauneiutilizricomuneaarborilorbinari,ianumepentrua
reprezentaievaluaexpresiilogice.

Reprezentareaarborilorbinari
Arboriibinaripotfireprezentainmaimultemoduri.Structuradinspateleacestorapoatefiunsimplu
vector,alocatdinamicsaunu,sauostructurcefolosetepointeri,aacumivomreprezentanacest
articol.
BinaryTree.h
#ifndef__BINARY_TREE_H
#define__BINARY_TREE_H

#include<cstdio>
http://ocw.cs.pub.ro/courses/sdca/articole/articol09

1/4

30.06.2016

Articol09ArboriBinari[CSOpenCourseWare]

#include<cstdio>
#include<cstdlib>

template<typenameT>
classBinaryTree
{
public:
BinaryTree();
~BinaryTree();

private:
BinaryTree<T>*leftNode;
BinaryTree<T>*rightNode;

T*pData;
};

#endif//__BINARY_TREE_H

Structuranoduluidemaisusesteclar:
pointerctrefiulstng
pointerctrefiuldrept
pointerctredate
Pentrutoimembriiunuinod,trebuiesalocaimemoriedinamic,darnuinconstructor!Alocaimemoria
doaratuncicndaveinevoiedeea.
Deasemenea,dezalocareamemorieisevafacerecursiv,darnumaiatuncicandestenecesar.
Pentruanereaminticumalocmmemorie:
BinaryTree<T>*node=newBinaryTree<T>();
deletenode;

T*pData=newT;
deletepData;

Parcurgereaarborilor
Preordine
Separcurgerdcina
Separcurgesubarborelestng
Separcurgesubarboreledrept
Exemplu:
PreorderTraverse(BinaryTree<T>*node)
{
Process(node>pData);
PreorderTraverse(node>leftNode);
PreorderTraverse(node>rightNode);
}

Inordine
Separcurgesubarborelestng
Separcurgerdcina
Separcurgesubarboreledrept
http://ocw.cs.pub.ro/courses/sdca/articole/articol09

2/4

30.06.2016

Articol09ArboriBinari[CSOpenCourseWare]

Postordine
Separcurgesubarborelestng
Separcurgesubarboreledrept
Separcurgerdcina

Lime
Sefoloseteocoad,iarlafiecarepasseextragedinaceastcoadcteunnodiseadugnapoin
coadnodulstng,respectivdreptalnoduluiscos.Acestalgoritmcontinupncndcoadadevinegoal.
NodurilefrunznuaudescendeninodulstnginoduldreptpointeazlaNULLinutrebuieadugate
ncoad.

Arboriasociaiexpresiilor
Oexpresiematematicesteunirdecaracterecompusdin:
variabile
constante
operatori
paranteze(eventual).
Fiecreiexpresiiisepoateasociaunarborebinar,ncare:
nodurileinterioarereprezintoperatorii
frunzelereprezintconstantelei/sauvariabilele.
nterminologialimbajelorformaleiacompilatoarelor,acestarboresemainumeteiAbstractSyntax
Tree(AST).
Pentruexpresia(a+1)*(b+10)+25/c,arboreleasociatesteprezentatmaijos:

Evaluareaexpresiilor
Urmtorulpseudocodreprezintnliniimarialgoritmuluideevaluareaexpresiilorreprezentatesub
http://ocw.cs.pub.ro/courses/sdca/articole/articol09

3/4

30.06.2016

Articol09ArboriBinari[CSOpenCourseWare]

formdearboribinari:
Evalueaza(Nodenod){
//Dacanuestenodterminal...
if(nod>left||nod>right){
//Evaluamexpresiilesubarborilor...
res1=Evalueaza(nod>left);
res2=Evalueaza(nod>right);

//...sicombinamrezultateleaplicandoperatorul
returnAplicaOperator(nod>op,res1,res2);
}else{
//Dacanodulterminalcontineovariabila,atunciintoarcemvaloareavariabilei
if(nod>var)
returnValoare(nod>var);
else//Avemoconstanta
returnnod>val;
}
}

Interviu
Aceastseciunenuestepunctatincearcsvfacooarecareideeatipurilordentrebripecarele
puteintlnilaunjobinterview(internship,parttime,fulltime,etc.)dinmateriaprezentatncadrul
laboratorului.
Ceesteunarbore?
Cumpoatefireprezentatunnoddintrunarborebinar?
Daiexempludeuntip(maimultetipuri)deparcurgerealarborilorbinari.Descrieimodulde
funionarealacestuia(acestora).
Daiexempludeunmoddeutilizarealarborilorbinari.
Cecomplexitatemedie/worstcaseaufunciiledeinserare/tergere/cutarepentruunarbore
binar,BST,AVL,etc.(maimultedesprecomplexitateaalgoritmiloristructurilordedateveinva
nanul2:AnalizaAlgoritmiloriProiectareaAlgoritmilor).

Resurse
[1]BinaryTree[http://en.wikipedia.org/wiki/Binary_tree]
[2]AVL[http://en.wikipedia.org/wiki/AVL_tree]
[3]RedBlackTree[http://en.wikipedia.org/wiki/Red%E2%80%93black_tree]
[4]SplayTree[http://en.wikipedia.org/wiki/Splay_tree]
[5]AST[http://en.wikipedia.org/wiki/Abstract_syntax_tree]
[6]DNF[http://en.wikipedia.org/wiki/Disjunctive_normal_form]
sdca/articole/articol09.txtLastmodified:2016/04/2219:40bydarius.neatu

http://ocw.cs.pub.ro/courses/sdca/articole/articol09

4/4

S-ar putea să vă placă și