You are on page 1of 5

Ministerul Educaţiei al Republicii Moldova

Universitatea Tehnică a Moldovei

Raport
Lucrarea de laborator Nr.3
la Matematica Discreta

Parcurgerea în adâncime și lărgime

A efectuat: st. gr. RM-201 Ghirea Gabriel

A verificat: conf. univ. Gorban Maria

Chişinău, 2021
Lucrare de laborator Nr.3

Listing-ul programului

#include <stdio.h>
#include <stdlib.h>
typedef struct Node
{
    int id;
    struct Node *left;
    struct Node *right;
} 
Node;
typedef struct coada
{
    struct Node *adr;
    struct coada *next;
} 
Coada;
typedef struct stiva
{
    struct Node *adr;
    struct stiva *prev;
} 
Stiva;
Coada *first, *last;
Stiva *top;
Node *root;
int inq(Node *v)
{
    Coada *t;
    t = (Coada *)malloc(sizeof(Coada));
    if (t == NULL)
        return 0;
    t->adr = v;
    t->next = NULL;
    if (first == NULL)
        first = t;
    else
        last->next = t;

    last = t;
    return 1;
}
Node *delq()
{
Coada *t = first;
    Node *v;
    v = t->adr;
    first = t->next;
    if (t == last)
        first = last = NULL;
    free(t);
    return v;
}
int createRSD(Node *r)
{
    int f;
    if (r == NULL)
    {
        printf("\nPentru DA tastati ( 1 )\nPentru NU tastati ( 0 )\n");
        r = (Node *)malloc(sizeof(Node));
        printf("Dati indicile nodului (de exemplu 1) << ");
        scanf("%d", &r->id);
        if (r == NULL)
            return 0;
        root = r;
    }
    printf("\nDoriti sa creati Nodul stang pentru Nodul [%d]? << ", r->id);
    scanf("%d", &f);
    if (f != 1)
        r->left = NULL;
    else
    {
        r->left = (Node *)malloc(sizeof(Node));
        printf("Dati indicile nodului stang de la Nodul %d << ", r->id);
        scanf("%d", &(r->left)->id);
        if (r->left == NULL)
            return 0;
        if (createRSD(r->left) == 0)
            return 0;
    }
    printf("\nDoriti sa creati Nodul drept pentru Nodul [%d]? << ", r->id);
    scanf("%d", &f);
    if (f != 1)
        r->right = NULL;
    else
    {
        r->right = (Node *)malloc(sizeof(Node));
        printf("Dati indicile nodului drept de la Nodul %d << ", r->id);
        scanf("%d", &(r->right)->id);
        if (r->right == NULL)
            return 0;
        if (createRSD(r->right) == 0)
            return 0;
    }
    return 1;
}
void adancime(Node *r)
{
    if (r)
    {
        printf("| %d |", r->id);
        adancime(r->left);
        adancime(r->right);
    }
}
int latime()
{
    Node *p;
    first = last = NULL;
    printf(" Parcurgerea in latime: ");
 if (inq(root) == 0)
 return 0;
 while (first != NULL)
 {
 p = delq();
 printf("| %d |", p->id);
 if (p->left)
 if (inq(p->left) == 0)
 return 0;
 if (p->right)
 if (inq(p->right) == 0)
 return 0;
 }
return 1;
}
int main()
{
createRSD(root);
printf("Parcurgerea in adancime: ");
adancime(root);
printf("\n");
if (latime() == 0)
printf("\nerr\n");
}

You might also like