mai bine iti faci functia altfel, ea primeste ca parametru doar valoarea nodului ce urmeaza afi inserat (sau nu primeste nici un parametru si citeste valoarea cu scanf) si apoi returneaza nodul nou. ex:
pnod* creare()
{
int x=0; scanf("%d", &x);
if (x)
{
// alocam memorie pentru nod
pnod* p = (pnod*) malloc(sizeof(pnod));
// umplem nodul cu informatie
p->info = x;
p->st = creare();
p->dr = creare();
}
else p = NULL;
return p;
}
Functia, apelata din programul principal, returneaza un pointer la radacina arborelui.
Dar in structura ta a programului ai o problema, arborele va fi cat se poate de debalansat - toate elementele vor avea doar fiu stang, caci in recursivitate acela se apeleaza primul (dar va fi un arbore binar
)
Depinde acum cum vrei sa construiesti arborele, poate vrei sa aiba anumite proprietati (gen fiul stang sa fie mai mare ca tatal si fiul drept mai mic ca tatal). In cazul acesta iti sugerez sa faci 2 functii: una care creeaza un nod si alta care adauga un nod in arbore. (La creere, nodul are fii NULL)
Daca te uiti, in codul tau original nu alocai nicaieri memorie pentru fii, aveai doar pointeri la ei
PS: codul e scris direct in fereastra, nu e testat, sper ca nu am gresit la sintaxa