Sunteți pe pagina 1din 4

Se citeste un arbore cu n varfuri dat prin vectorul TATA.

1) Sa se afiseze muchiile arborelui


2) Sa se construiasca si sa se afiseze matricea de adiacenta a arborelui.

http://informaticasite.ro/arbori/642-arbori-binari-vector-tata.html
Observatie: vectorul TATA precizeaza pentru fiecare varf i, nodul TATA[i] care reprezinta parintele sau
Pentru arborele din imagine vectorul TATA este: 0,1,2,1.
#include<iostream.h>
int n, t[20], a[20][20];void afis()
{ int i,j;
for(i=1;i<=n;i++)
{ for(j=1;j<=n;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
}void main()
{ int i;
cout<<"nr de noduri: ";cin>>n;
cout<<"dati vectorul tata "<<endl;
for(i=1;i<=n;i++)
{
cout<<"t["<<i<<"]=";
cin>>t[i];
}
cout<<"muchiile sunt: "<<endl;
for(i=1;i<=n;i++)

if(t[i]!=0)
{ cout<<"["<<t[i]<<","<<i<<"] ";
a[i][t[i]]=a[t[i]][i]=1;
}
cout<<endl;
cout<<"matricea de adiacenta este: "<<endl;
afis();

Probleme
/
1.Se citeste un arbore cu n varfuri dat prin vectorul TATA.
a) Sa se afiseze muchiile arborelui
b) Sa se construiasca si sa se afiseze matricea de adiacenta a arborelui.
Ex: Pentru vectorul de tati 2 0 2 1 3 se vor afisa muchiile [1,2] [2,3] [1,4] [3,5] si matricea de
adiacenta
01010
10100
01001
10000
00100

Rezolvare:
#include<iostream.h>
int n, T[100], a[100][100];
void afis()
{ int i,j;
for(i=1;i<=n;i++)
{ for(j=1;j<=n;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
}
void main()
{ int i;
cin>>n;
for(i=1;i<=n;i++) cin>>T[i];
for(i=1;i<=n;i++)
if(T[i]!=0)
{ cout<<"["<<T[i]<<","<<i<<"] ";
a[i][T[i]]=a[T[i]][i]=1;
}
cout<<endl;
afis();

. 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.
Rezolvare:
#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 0radacina).
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
Rezolvare:
#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();
}