Cod sursa(job #1941461)

Utilizator amaliarebAmalia Rebegea amaliareb Data 27 martie 2017 12:21:41
Problema Trie Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.4 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;
ifstream f("trie.in");
ofstream g("trie.out");
int n,i,j,x;
char s[25];
struct nod
{
    int nrc, nrp;
    nod *fii[26];
    nod()
    {
        nrc=nrp=0;
        for(int i=0;i<26;i++) fii[i]=NULL;
    }
};
nod *root=NULL;

nod *adauga(nod *p, char *s)
{
    if(p==NULL)
    {
        p=new nod;
    }
    (p->nrp)++;
    if(s[0]!='\0')
    {
        p->fii[s[0]-'a']=adauga(p->fii[s[0]-'a'],s+1);
    }
    else
    {
        p->nrc++;
    }
    return p;
}

int vcuv(nod *p, char *s)
{
    if(s[0]=='\0')
    {
        return p->nrc;
    }
    else
    {
        if(p==NULL) return 0;
        else vcuv(p->fii[s[0]-'a'],s+1);
    }
}
/*
int vpref(nod *p, char *s, int lungime)
{
    if(s[0]=='\0')
    {
        return lungime-1;
    }
    else
    {
        if(p==NULL) return lungime-1;
        else vpref(p->fii[s[0]-'a'],s+1,lungime+1);
    }
} */

nod *sterge(nod *p, char *s)
{
    if(s[0]==0) p->nrc--;
    else
    {
        p->fii[s[0]-'a']=sterge(p->fii[s[0]-'a'],s+1);
    }
    p->nrp--;
    if(p->nrp==0)
    {
        delete p;
        p=NULL;
    }
    return p;
}

int main()
{
    while(f>>x)
    {
        f.get();
        f.getline(s,25);
        if(x==0) root = adauga(root,s);
        else if(x==1) sterge(root,s);
        else if(x==2) g<<vcuv(root,s)<<'\n';
        //else if(x==3) g<<vpref(root,s,0)<<'\n';
    }
    return 0;
}