Cod sursă (job #76959)

Utilizator avatar AlexPascadi Alex Pascadi AlexPascadi IP ascuns
Problemă Pointeri Compilator cpp | 1.20 kb
Rundă Tema 2 clasele 9-10 2014/15 Status evaluat
Dată 4 oct. 2014 19:15:20 Scor 50
#include <stdio.h>

using namespace std;

struct lista
{
    int st;
    int dr;
};

const int N=200000;

lista v[N];

void Act(int nod)
{
    int nodst=v[nod].st,noddr=v[nod].dr,i;

    //stanga
    if(nodst!=-1)
    {
        Act(nodst);
        i=nodst;
        while(v[i].dr!=-1)
            i=v[i].dr;
        v[i].dr=nod;
        v[nod].st=i;
    }

    //dreapta
    if(noddr!=-1)
    {
        Act(noddr);
        i=noddr;
        while(v[i].st!=-1)
            i=v[i].st;
        v[i].st=nod;
        v[nod].dr=i;
    }
}

int main()
{
    FILE *in,*out;
    in=fopen("pointeri.in","r");
    out=fopen("pointeri.out","w");

    int n,rad,i;
    fscanf(in,"%d%d",&n,&rad);

    for(i=0;i<n;i++)
        fscanf(in,"%d",&v[i].st);
    for(i=0;i<n;i++)
        fscanf(in,"%d",&v[i].dr);

    Act(rad);

    i=0;
    while(v[i].st!=-1)
        i++;
    fprintf(out,"%d\n",i);

    for(i=0;i<n;i++)
    {
        fprintf(out,"%d",v[i].st);
        if(i!=n-1)
            fprintf(out," ");
    }
    fprintf(out,"\n");
    for(i=0;i<n;i++)
    {
        fprintf(out,"%d",v[i].dr);
        if(i!=n-1)
            fprintf(out," ");
    }

    return 0;
}