Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <math.h>
- #include <stddef.h>
- #include <time.h>
- int k=0;
- int randomazer (int min, int max){
- float random;
- random = rand();
- random = (random / RAND_MAX) * (max-min) + min;
- return((int)random);
- }
- typedef struct fff {
- int key;
- int lengh;
- struct fff *left;
- struct fff *right;
- struct fff *parent;
- } node;
- node* new_node (int key, node *parent){
- node *tmp = (node*)malloc(sizeof(node));
- tmp -> left = tmp -> right = NULL;
- tmp -> key = key;
- tmp -> parent = parent;
- tmp -> lengh = 1;
- if (parent!=NULL) {
- tmp -> lengh = tmp -> parent -> lengh +1;
- }
- if (k<tmp->lengh) k=tmp->lengh;
- // printf("\n lengh: %d \n", tmp -> lengh);
- // printf("3");
- return tmp;
- }
- void add_node (node **head, int key){
- if (*head == NULL){ //if tree empty
- *head = new_node (key, NULL);
- // printf("4");
- }
- else{
- node *iter = *head;
- // printf("5");
- while (iter){
- // printf("6");
- if (key >= (iter -> key)){
- // printf("7");
- if (iter -> right){
- // printf("8");
- iter = iter -> right;
- }
- else{
- // printf("9");
- iter -> right = new_node (key, iter);
- break;
- }
- }
- else{
- // printf("10");
- if (iter -> left){
- // printf("11");
- iter = iter -> left;
- }
- else{
- // printf("12");
- iter -> left = new_node (key, iter);
- break;
- }
- }
- }
- }
- }
- node* tree_search (node* head, int key){
- if (head == NULL)
- return NULL; //not founded
- if (key == head->key)
- return head;
- if (key < head->key)
- return tree_search (head->left, key);
- else
- return tree_search (head->right, key);
- }
- void output_tree (node *head) {
- node *iter = head;
- if (iter) {
- output_tree (iter -> left);
- printf("%d ", iter -> key);
- output_tree (iter -> right);
- }
- }
- int main (void){
- int min, max, max_h, r;
- srand(time(NULL));
- printf ("Input min, max value and max hight of tree: ");
- scanf ("%d %d %d", &min, &max, &max_h);
- node *head = NULL;
- printf ("filling with random elements: \n");
- while (k < max_h){
- r = randomazer (min, max);
- printf ("%d ", r);
- add_node(&head, r);
- }
- printf ("\n");
- output_tree (head);
- printf ("\n\n");
- int behavior=1, behavior2=1, variety, variety2;
- int add_key, search_key, delete_key;
- node *iter;
- iter = head;
- node *tmp_search;
- while (behavior2){
- printf ("Choose what u want:\n1-SEARCH\n2-ADD\n3-DELETE\n4-OUTPUT TREE\n5-WALK IN TREE\n0-If you want stop this\n");
- printf ("Your choice: ");
- scanf ("%d", &variety2);
- switch (variety2){
- case 1:
- printf ("Key, what you search: ");
- scanf ("%d", &search_key);
- tmp_search = tree_search (head, search_key);
- if (tmp_search == NULL)
- printf ("No this key in tree\n");
- else
- printf ("This key was founded\n");
- break;
- case 2:
- printf ("Added element:");
- scanf ("%d", &add_key);
- add_node (&head, add_key);
- printf ("\n");
- break;
- case 3:
- printf ("Key, which delete: ");
- scanf ("%d", &delete_key);
- int tmp2;
- // tmp2 = delete_node (head, delete_key);
- if (tmp2 == -1)
- printf ("Error\n");
- else
- printf ("Element was deleted\n");
- break;
- case 4:
- output_tree (head);
- printf ("\n");
- break;
- case 5:
- printf ("\n");
- while (behavior){
- printf("Current node: %d\n", iter->key);
- if(iter->left != NULL)
- printf("Left child: %d\n", iter->left->key);
- if(iter->right != NULL)
- printf("Right child: %d\n", iter->right->key);
- printf ("Choose what u want:\n1-Higher level\n2-To left son\n3-To right son\n0-If you want stop this\n");
- printf ("Your choice: ");
- scanf ("%d", &variety);
- switch (variety){
- case 1:
- if(iter->parent != NULL)
- iter = iter->parent;
- else
- printf("No parent node\n");
- break;
- case 2:
- if (iter->left != NULL)
- iter = iter->left;
- else
- printf ("The left child node is missing\n");
- break;
- case 3:
- if (iter->right != NULL)
- iter = iter->right;
- else
- printf ("The right child node is missing\n");
- break;
- case 0:
- behavior = 0;
- break;
- default:
- printf("Wrong input1\n" );
- break;
- }
- }
- break;
- case 0:
- behavior2 = 0;
- break;
- default:
- printf("Wrong input2\n" );
- break;
- }
- printf ("\n");
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement