Documente Academic
Documente Profesional
Documente Cultură
Articol - Arbori Binari
Articol - Arbori Binari
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