#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;
}
|