Advertisement
Georggi

levelorder

Mar 7th, 2018
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.31 KB | None | 0 0
  1. #include "stdio.h"
  2. #include "stdlib.h"
  3. #include "conio.h"
  4.  
  5. typedef struct tree_node{
  6.     int value;
  7.     struct tree_node* l;
  8.     struct tree_node* r;
  9. } tree_node;
  10.  
  11. typedef struct QUEUE_ELEM{
  12.     tree_node* elem;
  13.     struct QUEUE_ELEM* next;
  14. } queue_node;
  15.  
  16. void put_to_end(queue_node* queue_root, queue_node* queue_elem){
  17.     while (queue_root->next != NULL){
  18.         queue_root = queue_root->next;
  19.     }
  20.     queue_root->next = queue_elem;
  21. }
  22.  
  23. queue_node* create_queue(queue_node* queue_root, tree_node* tree_elem){
  24.     queue_node* new_elem = (queue_node*)malloc(sizeof(queue_node));
  25.     new_elem->elem = tree_elem;
  26.     new_elem->next = NULL;
  27.     if(queue_root == NULL){
  28.         return new_elem;
  29.     } else {
  30.         put_to_end(queue_root, new_elem);
  31.         return queue_root;
  32.     }
  33. }
  34.  
  35. queue_node* remove_from_head(queue_node* queue_root){
  36.     queue_node* new_queue_head = queue_root->next;
  37.     free(queue_root);
  38.     return new_queue_head;
  39. }
  40.  
  41. tree_node* create_tree(tree_node* p, int key){
  42.     if(p == NULL){
  43.         p = (tree_node*)malloc(sizeof(tree_node));
  44.         p->value = key;
  45.         p->l = NULL;
  46.         p->r = NULL;
  47.     } else {
  48.         if (p->value < key){
  49.             p->r = create_tree(p->r, key);
  50.         } else {
  51.             p->l = create_tree(p->l, key);
  52.         }
  53.     }
  54.     return p;
  55. }
  56.  
  57. tree_node* read_file(tree_node *root){
  58.     FILE* fp;
  59.     fp = fopen("input", "r");
  60.     while(1){
  61.         int key, is_the_end = fscanf(fp, "%d", &key);
  62.         if (is_the_end != -1){
  63.             printf("%d\n", key);
  64.             root = create_tree(root, key);
  65.         } else {break;}
  66.     }
  67.     fclose(fp);
  68.     return root;
  69. }
  70.  
  71. void levelorder(tree_node* root){
  72.     queue_node* QUEUE = NULL;
  73.     printf("%d ", root->value);
  74.     if(root->l != NULL) QUEUE = create_queue(QUEUE, root->l);
  75.     if(root->r != NULL) QUEUE = create_queue(QUEUE, root->r);
  76.     while(QUEUE != NULL){
  77.         tree_node* next_elem = QUEUE->elem;
  78.         printf("%d ", next_elem->value);
  79.         QUEUE = remove_from_head(QUEUE);
  80.         if(next_elem->l != NULL) QUEUE = create_queue(QUEUE, next_elem->l);
  81.         if(next_elem->r != NULL) QUEUE = create_queue(QUEUE, next_elem->r);
  82.     }
  83. }
  84.  
  85. int main(){
  86.     tree_node* root = NULL;
  87.     root = read_file(root);
  88.     levelorder(root);
  89.     _getch();
  90.     return 0;
  91. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement