0

I am making a program to do a breadth first search.
The code which I am posting here just makes a que of the nodes visited in a binary tree in inorder fashion,so this implementation is not yet complete.
While developing I got a segmentation fault which I was not able to understand why I am getting so I am posting since the tree of same program (without BFS) is working.

#include<stdio.h>
#include<stdlib.h>
struct node {
    struct node *left, *right;
    int data, color;
} *root;
//root is used to point to the root node of tree
int check = 0;
typedef struct node tree;
struct list {
    struct list *next;
    struct node *btree_node_ptr;    //btree_node_ptr stores the address of members of structure node
} *que_start;
typedef struct list que;
tree *create_node(int);
void add_tree(int value, tree *);
void travel_tree(tree *);
void enque(tree *);
void travel_que(void);
void deque(tree *);
que *que_add_node(tree *);
que *tree_que;
int main()
{
    int i, j,value;
    tree *nv;
    root = NULL;
    que_start = NULL;
    value = 0;
    while (0) {
        printf("enter value \n");
        scanf("%d", &value);
        if (value == 1)
            break;
        if (root == NULL)
            root = create_node(value);
        else if (root != NULL) {
            //      nv = create_node(value);
            add_tree(value, root);
        }
    }
    travel_tree(root);
    printf("\n travelling in que \n");
    travel_que();    
}

tree *create_node(int num)
{
    tree *temp;

    temp = (tree *) malloc(sizeof(tree));
    temp->data = num;
    temp->left = NULL;
    temp->right = NULL;
    temp->color=2;
    return temp;

}

void add_tree(int v1, tree * node)
{

    if (v1 <= node->data) {
        if (node->left != NULL) {
            add_tree(v1, node->left);
        } else {
            node->left = create_node(v1);
        }
        return;
    }
    if (v1 > node->data) {
        if (node->right != NULL) {
            add_tree(v1, node->right);
        } else {
            node->right = create_node(v1);
        }
        return;
    }

}

void travel_tree(tree *temp)
{
//      printf("\n inside travel_tree");

    if (temp->left != NULL)
        travel_tree(temp->left);
    printf(" \n %d ", temp->data);
    enque(temp);
    if (temp->right != NULL)
        travel_tree(temp->right);
    return;
}

que *que_add_node(tree * temp)
{
    que *b;
    b = (que *) malloc(sizeof(que));
    b->next = NULL;
    temp->color=1;
    b->btree_node_ptr = temp;
    return b;
}

void enque(tree *temp)
{
//to make a que of que
    tree_que=que_start;
    if (que_start == NULL) {
        que_start = que_add_node(temp);
        tree_que=que_start;
        return;
    }
    else
        {    while(tree_que->next!=NULL)
        {
        tree_que=tree_que->next;
        }
    tree_que->next=que_add_node(temp);
    }
     return;
}
void travel_que(void)
{
    tree_que=que_start;
    while (tree_que!=NULL)
        {
    printf("Data is %d color is %d\n",tree_que->btree_node_ptr->data,tree_que->btree_node_ptr->color);
    tree_que=tree_que->next;
    }
    return;
}
void deque (tree *temp)
{
 while (tree_que!=NULL)
     {
     tree_que=tree_que->next;

    }
    return;
}
2
Contributors
1
Reply
3
Views
6 Years
Discussion Span
Last Post by Martin B
This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.