Orar semigroup #2

Orar semigroup #2

Laborator 5 - Arbori (25 martie)

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)
{
    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);
    }
}
Construire, afisare, inaltime si nr de frunze
#include <stdio.h>
#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;
}
Să se scrie o funcţie care determină înălţimea unui arbore binar.
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;
    }
}
Să se scrie o funcţie care determină numărul de frunze ale unui arbore binar.
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;
}

marți, 25 martie 2014 by DlMuresan
Categories: , , , | Leave a comment

Leave a Reply