C Data Structure: Binary Tree

#include <stdlib.h>
#include <stdio.h>

/**
 * Author: Ozan Özenoğlu
 * Date : 10/10/2020
 * */

struct tree_node {
    int val;
    struct tree_node *left_child;
    struct tree_node *right_child;
};

typedef struct tree_node tree_node_t;

struct tree {
    int size;
    tree_node_t *parent;
};

typedef struct tree tree_t;


void init(tree_t *tree) {
    tree->size = 0;
    tree->parent = (void*)0;
}


void print_tree(tree_node_t *root){
    if(root == (void*)0) {
        return;
    } else {
        print_tree(root->left_child);
        printf("%d\n",root->val);
        print_tree(root->right_child);
    }
}



void add_val(tree_node_t *node , int val) {
    
    if(val > node->val) {
        if (node->right_child == (void*)0) {
            node->right_child = malloc(sizeof(tree_node_t)*1);
            node->right_child->val = val;
            node->right_child->right_child = (void*)0;
            node->right_child->left_child = (void*)0;
            printf("%d is added as right child of %d\n", val , node->val);
        } else {
            add_val(node->right_child, val);
        }
    } else if(val < node->val) {
        if (node->left_child == (void*)0) {
            node->left_child = malloc(sizeof(tree_node_t)* 1);
            node->left_child->val = val;
            node->left_child->right_child = (void*)0;
            node->left_child->left_child = (void*)0;
            printf("%d is added as left child of %d\n", val , node->val);
            
        } else {
            add_val(node->left_child, val);
        }
    } else { // duplicate key
        return;
    }
}

void add(tree_t *tree, int val) {
    if (tree->parent == (void*)0) {
        tree_node_t *parent_node = malloc(sizeof(tree_node_t) * 1);
        tree->parent = parent_node;
        parent_node->val = val;
        tree->size++;
        printf("Root node created with val %d\n", val);
    } else {
        add_val(tree->parent, val);
    }
}






int main() {

    tree_t my_tree;
    init(&my_tree);
    add(&my_tree, 10);
    add(&my_tree, 8);
    add(&my_tree, 4);
    add(&my_tree, 12);
    add(&my_tree, 11);
    add(&my_tree, 15);
    add(&my_tree, 25);
    add(&my_tree, 32);
    add(&my_tree, 1);
    add(&my_tree, 2);
    add(&my_tree, 111);
    add(&my_tree, 5);

    print_tree(my_tree.parent);

    return 0;
}

Leave a Reply

Your email address will not be published. Required fields are marked *