Professional Documents
Culture Documents
Raport
Lucrarea de laborator Nr.3
la Matematica Discreta
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");
}