Documente Academic
Documente Profesional
Documente Cultură
void BF(int r)
{ int s,d,i,x[100];
d=s=1;
x[1]=r; p[r]=1;
while (s<=d)
{ for(i=1;i<=n;i++)
if(a[x[s]][i] &&!p[i])
{ d++; x[d]=i;
p[i]=1; T[i]=x[s];
}
s++;
}
}
void main()
{ int i;
citire();
BF(r);
for(i=1;i<=n;i++) cout<<T[i]<<" ";
}
4.
Se citeste un arbore cu n varfuri dat prin vectorul
TATA. Sa se afiseze frunzele arborelui.
Ex: Pentru vectorul de tati 2 0 2 1 3 se vor afisa
frunzele 4 si 5.
#include<iostream.h>
int n, T[100], p[100];
void main()
{ int i;
cin>>n;
for(i=1;i<=n;i++)
{ cin>>T[i];
p[T[i]]=1;
}
for(i=1;i<=n;i++)
if(!p[i]) cout<<i<<" ";
}
5.
Se citeste un arbore cu n varfuri dat prin vectorul
TATA.
a) Sa se afiseze gradele varfurilor.
b) Sa se afiseze pentru fiecare varf nivelul pe care se
afla (numerotarea nivelelor incepe de la 0-radacina).
Ex: Pentru vectorul de tati 2 0 2 1 3 se vor afisa
urmatorii vectori:
Gradele: 2 2 2 1 1
Nivelele: 1 0 1 2 2
#include<iostream.h>
int n,r, T[100], D[100], p[100], niv[100];
void afis()
{ for(int i=1;i<=n;i++) cout<<D[i]<<" ";
cout<<endl;
for(i=1;i<=n;i++) cout<<niv[i]<<" ";
}
void df(int r)
{
for(int i=1;i<=n;i++)
if(T[i]==r && !p[i])
{ p[i]=1;
niv[i]=niv[r]+1;
df(i);
}
}
void main()
{ int i;
cin>>n;
for(i=1;i<=n;i++)
{
cin>>T[i];
if(T[i]!=0) { D[i]++;
D[T[i]]++;
}
}
for(i=1;i<=n;i++)
if(T[i]==0) r=i;
niv[r]=0;
df(r);
afis();
}
for(int i=1;i<=n;i++)
if(!p[i]&&x[b[s]][i]&&c[i]==c[b[s]])
{d++; b[d]=i; p[i]=1;
c[i]=cul;
}
s++;
}
c[r]=cul;
void ordonare()
{
int i,gata;
muchie aux;
do{
gata=1;
for(i=1;i<m;i++)
if(a[i].c>a[i+1].c)
{
aux=a[i];
a[i]=a[i+1];
a[i+1]=aux;
gata=0;
}
}while(!gata);
}
void afis()
{ for(int k=1;k<=m;k++)
fout<<a[k].x<<" "<<a[k].y<<" "<<a[k].c<<"\n";
}
int main()
{
citire();
int i;
for(i=1;i<=n;i++) c[i]=i;
ordonare();
//afis();
k=1;nr=0;
do{
if(c[a[k].x]!=c[a[k].y])
{
fout<<a[k].x<<" "<<a[k].y<<" "<<a[k].c<<"\n";
if(c[a[k].x]<c[a[k].y]) bf(a[k].y,c[a[k].x]);
else bf(a[k].x,c[a[k].y]);
nr++;
}
k++;
}while(nr<n-1);
}
10.
Din fisierul sd.in se citeste un numar natural n reprezentand numarul de varfuri ale unui
arbore binar si apoi vectorii S si D pentru descendentii fiecarui nod din arbore.
a) Sa se parcurga arborele in preordine, inordine si postordine.
b) Sa se parcurga arborele pe nivele
c) Sa se calculeze si sa se afiseze inaltimea arborelui.
Exemplu:
sd.in
7
2400700
3560000
Se va afisa:
Preordine: 1 2 4 5 7 3 6
Inordine: 4 2 7 5 1 3 6
Postordine: 4 7 5 2 6 3 1
Pe nivele: 1 2 3 4 5 6 7
Adancimea: 3
#include<fstream>
using namespace std;
ifstream fin("sd.in");
ofstream fout("arb.out");
int S[100],D[100],P[100],r,n,i,maxx;
void RSD(int n)
{
fout<<n<<" ";
if(S[n]) RSD(S[n]);
if(D[n]) RSD(D[n]);
}
void SRD(int n)
{
if(S[n]) SRD(S[n]);
fout<<n<<" ";
if(D[n]) SRD(D[n]);
}
void SDR(int n)
{
if(S[n]) SDR(S[n]);
if(D[n]) SDR(D[n]);
fout<<n<<" ";
}
void BF(int r)
{
int x[100],i,j;
i=1;j=i;
x[1]=r;
while(i<=j)
{
if(S[x[i]]) x[++j]=S[i];
if(D[x[i]]) x[++j]=D[i];
i++;
}
for(i=1;i<=n;i++) fout<<x[i]<<" ";
}
void adancime(int n, int niv)
{
if(niv>maxx) maxx=niv;
if(S[n]) adancime(S[n],niv+1);
if(D[n]) adancime(D[n],niv+1);
}
int main()
{
fin>>n;
for(i=1;i<=n;i++) P[i]=0;
for(i=1;i<=n;i++)
{
fin>>S[i];
P[S[i]]=1;
}
for(i=1;i<=n;i++)
{
fin>>D[i];
P[D[i]]=1;
}
for(i=1;i<=n;i++)
if(P[i]==0) r=i;
fout<<"Preordine: ";
RSD(r);
fout<<endl;
fout<<"Inordine: ";
SRD(r);
fout<<endl;
fout<<"Postordine: ";
SDR(r);
fout<<endl;
fout<<"Pe nivele: ";
BF(r);
fout<<endl;
adancime(r,0);
fout<<"Adancimea: ";
fout<<maxx;
fin.close();
fout.close();
return 0;
}