Cod sursa(job #777764)

Utilizator oldcatanca popescu oldcat Data 13 august 2012 12:52:00
Problema Schi Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.57 kb
#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;
}