Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdio.h"
- #include "stdlib.h"
- #include "conio.h"
- typedef struct tree_node{
- int value;
- struct tree_node* l;
- struct tree_node* r;
- } tree_node;
- typedef struct QUEUE_ELEM{
- tree_node* elem;
- struct QUEUE_ELEM* next;
- } queue_node;
- void put_to_end(queue_node* queue_root, queue_node* queue_elem){
- while (queue_root->next != NULL){
- queue_root = queue_root->next;
- }
- queue_root->next = queue_elem;
- }
- queue_node* create_queue(queue_node* queue_root, tree_node* tree_elem){
- queue_node* new_elem = (queue_node*)malloc(sizeof(queue_node));
- new_elem->elem = tree_elem;
- new_elem->next = NULL;
- if(queue_root == NULL){
- return new_elem;
- } else {
- put_to_end(queue_root, new_elem);
- return queue_root;
- }
- }
- queue_node* remove_from_head(queue_node* queue_root){
- queue_node* new_queue_head = queue_root->next;
- free(queue_root);
- return new_queue_head;
- }
- tree_node* create_tree(tree_node* p, int key){
- if(p == NULL){
- p = (tree_node*)malloc(sizeof(tree_node));
- p->value = key;
- p->l = NULL;
- p->r = NULL;
- } else {
- if (p->value < key){
- p->r = create_tree(p->r, key);
- } else {
- p->l = create_tree(p->l, key);
- }
- }
- return p;
- }
- tree_node* read_file(tree_node *root){
- FILE* fp;
- fp = fopen("input", "r");
- while(1){
- int key, is_the_end = fscanf(fp, "%d", &key);
- if (is_the_end != -1){
- printf("%d\n", key);
- root = create_tree(root, key);
- } else {break;}
- }
- fclose(fp);
- return root;
- }
- void levelorder(tree_node* root){
- queue_node* QUEUE = NULL;
- printf("%d ", root->value);
- if(root->l != NULL) QUEUE = create_queue(QUEUE, root->l);
- if(root->r != NULL) QUEUE = create_queue(QUEUE, root->r);
- while(QUEUE != NULL){
- tree_node* next_elem = QUEUE->elem;
- printf("%d ", next_elem->value);
- QUEUE = remove_from_head(QUEUE);
- if(next_elem->l != NULL) QUEUE = create_queue(QUEUE, next_elem->l);
- if(next_elem->r != NULL) QUEUE = create_queue(QUEUE, next_elem->r);
- }
- }
- int main(){
- tree_node* root = NULL;
- root = read_file(root);
- levelorder(root);
- _getch();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement