Documente Academic
Documente Profesional
Documente Cultură
Cercetării al Republicii
Moldova
Universitatea Tehnică a
Moldovei
Facultatea Calculatoare Informatică și
Microelectronică Departamentul Ingineria
Software și Automatică
RAPORT
la lucrarea de laborator
nr. 3 Structuri de Date
și Algoritmi
Chisinău 2023
Scopul lucrării Scopul lucrării este de a familiariza studentul cu mecanismul de creare a arborelui
binar de căutare și operații elementare asupra acestuia, utilizînd pentru aceasta limbajul C.
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#define COUNT 10
int n, ln=0;
int nr;
char * name;
int population;
char * location;
} City;
City * data;
} BinaryTreeNode;
new_node->data = data;
return new_node;
} BinaryTree;
my_binary->root = NULL;
return my_binary;
city->nr = nr;
city->name = strdup(name);
city->population = population;
city->location = strdup(location);
return city;
scanf("%d", &nr);
scanf("%s", name);
scanf("%d", &population);
scanf("%s", location);
printf("\n");
insertNewNodeInTree(BinaryTree, city);
if(current_node)
print_city(current_node->left);
print_city(current_node->right);
}
void insertNewNode(BinaryTreeNode * current_node, BinaryTreeNode * new_node)
if(current_node)
if(current_node->left)
insertNewNode(current_node->left,new_node);
else
current_node->left = new_node;
else
if(current_node->right)
insertNewNode(current_node->right,new_node);
else
current_node->right = new_node;
}
void insertNewNodeInTree(BinaryTree * myBinaryTree, City * city)
if(myBinaryTree->root)
insertNewNode(myBinaryTree->root, new_node);
else
myBinaryTree->root = new_node;
++n;//
if (current_node == NULL)
return;
else
SVD(current_node->left);
SVD(current_node->right);
}
void VSD(BinaryTreeNode * current_node)
if (current_node == NULL)
return;
VSD(current_node->left);
VSD(current_node->right);
if (current_node == NULL)
return;
SDV(current_node->left);
SDV(current_node->right);
int h = height(current_node);
int i;
printCurrentLevel(current_node, i);
if (current_node == NULL)
return;
if (level == 1)
if (current_node == NULL)
return 0;
else
else
system("cls");
if(current_node == NULL)
return -1;
else
if(Lmax>Rmax)
return (Lmax+1);
else
return (Rmax+1);
}
void Mirror_BinaryTree(BinaryTreeNode * current_node)
if (current_node==NULL)
return;
else
BinaryTreeNode * temp;
Mirror_BinaryTree(current_node->left);
Mirror_BinaryTree(current_node->right);
temp = current_node->left;
current_node->left = current_node->right;
current_node->right = temp;
if(current_node)
DeleteTreeNode(current_node->left);
DeleteTreeNode(current_node->right);
free(current_node);
}
void ClearTree(BinaryTree * Tree)
if(Tree)
if(Tree->root)
DeleteTreeNode(Tree->root);
Tree->root = NULL;
if(Tree)
ClearTree(Tree);
free(Tree);
system("cls");
if (current_node == NULL)
return NULL;
}
if(cheie == current_node->data->nr)
ln=0;
return;
++ln;
SearchInTree(current_node->left,cheie);
else
++ln;
SearchInTree(current_node->right,cheie);
// rotatia
x->right = node;
node->left = y;
return x;
// rotatia
return x;
int balance = 0;
if (node == NULL) {
return NULL;
if (balance > 1) {
node = rotateRight(node);
else {
node->left = rotateLeft(node->left);
node = rotateRight(node);
node = rotateLeft(node);
else {
node->right = rotateRight(node->right);
node = rotateLeft(node);
return node;
int menu()
system("cls");
printf("\n******************Menu**********************");
scanf("%d", &var1);
return var1;
int main()
while(var1)
var1=menu();
switch(var1)
{
case 1:
BinaryTree = create_tree();
scanf("%d", &n);
read_BinaryTree(BinaryTree,n);
break;
case 2:
print_city(BinaryTree->root);
break;
case 3:
int cheie;
scanf("%d", &cheie);
SearchInTree(BinaryTree->root,cheie);
//search(BinaryTree->root,cheie);
break;
case 4:
SVD(BinaryTree->root);
break;
case 5:
VSD(BinaryTree->root);
break;
}
case 6:
SDV(BinaryTree->root);
break;
case 7:
SVD(BinaryTree->root);
VSD(BinaryTree->root);
SDV(BinaryTree->root);
break;
case 8:
printLevelOrder(BinaryTree->root);
break;
case 9:
balanceTree(BinaryTree->root);
break;
case 10:
Mirror_BinaryTree(BinaryTree->root);
break;
}
case 11:
ClearTree(BinaryTree);
break;
case 12:
DeleteTree(BinaryTree);
BinaryTree = NULL;
break;
case 0:
return 0;
default:
getch();
return 0;