Afisarea arborelui in modul DRS (rotit cu 90 de grade spre stanga, nivelul se numara de la stanga la dreapta)
void inordine2(nod *r, int nivel)Construire, afisare, inaltime si nr de frunze
{
if(r)
{
inordine2(r->dr,nivel+1);
int i=0;
for(i=0;i<nivel;i++)
printf(" ");
printf("%c",r->ch);
inordine2(r->st,nivel+1);
}
}
#include <stdio.h>Să se scrie o funcţie care determină înălţimea unui arbore binar.
#include <stdlib.h>
typedef struct tip_nod
{
char ch;
struct tip_nod *st, *dr;
} nod;
void inordine_DRS(nod *r, int nivel)
{
if(r)
{
inordine_DRS(r->dr,nivel+1);
int i=0;
for(i=0; i<nivel; i++)
printf(" ");
printf("%c\n",r->ch);
inordine_DRS(r->st,nivel+1);
}
}
nod* construire()
{
nod *p;
int n;
char c;
n=sizeof(nod);
printf("Cititi: ");
fflush(stdin);
scanf("%c",&c);
if(c=='*')
return 0;
else
{
p=(nod *)malloc(n);
p->ch=c;
p->st=construire();
p->dr=construire();
}
return p;
}
int nr_frunze2(nod *p)
{
int nr=0;
if(p==NULL) return 0;
else if (p->st==NULL && p->dr==NULL)
return 1;
else nr=nr_frunze2(p->st)+nr_frunze2(p->dr);
return nr;
}
void inaltime3(nod *p, int *h)
{
if(p==0)
*h=0;
else
{
int h1=0;
inaltime3(p->st,&h1);
int h2=0;
inaltime3(p->dr,&h2);
if(h1>h2)
*h=h1+1;
else *h=h2+1;
}
}
int main()
{
nod *r;
r=construire();
inordine_DRS(r,0);
int hmax=0,nr=0;
nr=nr_frunze2(r);
inaltime3(r,&hmax);
printf("\nInaltime: %d\nNr frunze: %d",hmax,nr);
printf("\nApasati o tasta pentru terminare");
getch();
return 0;
}
void inaltime3(nod *p, int *h)Să se scrie o funcţie care determină numărul de frunze ale unui arbore binar.
{
if(p==0)
*h=0;
else
{
int h1=0;
inaltime3(p->st,&h1);
int h2=0;
inaltime3(p->dr,&h2);
if(h1>h2)
*h=h1+1;
else *h=h2+1;
}
}
int nr_frunze2(nod *p)
{
int nr=0;
if(p==NULL) return 0;
else if (p->st==NULL && p->dr==NULL)
return 1;
else nr=nr_frunze2(p->st)+nr_frunze2(p->dr);
return nr;
}