Pagini recente » Istoria paginii runda/test.cex/clasament | Istoria paginii utilizator/iionutstoica | Monitorul de evaluare | Istoria paginii utilizator/vladmedias | Cod sursa (job #777764)
Cod sursa(job #777764)
#include<fstream>
using namespace std;
FILE *f1=fopen("schi.in","r");
FILE *f2=fopen("schi.out","w");
typedef struct nod_ABC *ptr_ABC;
struct nod_ABC
{
int cheie;
int pozitie;
ptr_ABC st;
ptr_ABC dr;
};
ptr_ABC radacina;
int n,i,x;
ifstream fin ("schi.in");
ofstream fout("schi.out");
ptr_ABC inserare_pozitie ( ptr_ABC p, int x, int nr)
{
int poz=nr;
if(!p)
{
p= new nod_ABC;
p->cheie=x;
p->pozitie=1;
p->st=p->dr=NULL;
}
else
if(poz <= p->pozitie)
{
(p->pozitie)++;
p ->st =inserare_pozitie(p->st,x,poz);
}
else
if (poz > p->pozitie)
{
poz=poz-p->pozitie;
p->dr=inserare_pozitie(p->dr,x,poz);
}
return p;
}
/*void inserare_pozitie ( ptr_ABC &rad, int x, int nr)
{
int poz=nr;
ptr_ABC parinte=NULL,p=rad;
char tip_desc;
while(p)
{
if(poz <= p->pozitie)
{
(p->pozitie)++;
parinte=p;
p=p->st;
tip_desc='s';
}
else
{
poz=poz-p->pozitie;
parinte=p;
p=p->dr;
tip_desc='d';
}
}
p= new nod_ABC;
p->cheie=x;
p->pozitie=1;
p->st=p->dr=NULL;
if (parinte)
if(tip_desc=='s')
parinte->st=p;
else
parinte->dr=p;
else
rad=p;
}*/
void parcurgere_inordine( ptr_ABC p)
{
if(p)
{
parcurgere_inordine(p->st);
fprintf(f2,"%d\n", p->cheie);
parcurgere_inordine(p->dr);
}
}
int main()
{
fscanf(f1,"%d", &n);
for(i=1;i<=n;i++)
{
fscanf(f1,"%d", &x);
radacina=inserare_pozitie(radacina,i,x);
//inserare_pozitie(radacina,i,x);
}
parcurgere_inordine(radacina);
return 0;
}