Click here to Skip to main content
15,867,939 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
Hello!
I have the following C program that adds Nodes to a tree and then the user can select a sorting method. How can I modify the program in a manner that will allow me to add a LChild and RChild to every node? Any help is highly appreciated since I am completely new to BSTs.

What I have tried:

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

    struct treenode {
        struct treenode *lchild;
        struct treenode *rchild;
        int data;
        } *root = NULL;

    void insertnode(struct treenode **pp,int d)
    {
        for( ;*pp; )
        {
             if (d < (*pp)->data) pp = &(*pp)->lchild;
             else  pp = &(*pp)->rchild;
        }
        *pp = malloc (sizeof **pp);
        (*pp)->data = d;
        (*pp)->lchild = NULL;
        (*pp)->rchild = NULL;
    }

    void preorder(struct treenode *p)
    {
        if(p==NULL)
        {
            printf("\nThe list is empty");
            return;
        }

        printf("%d,",p->data);
        if (p->lchild) preorder(p->lchild);
        if (p->rchild) preorder(p->rchild);
    }

    void postorder(struct treenode *p)
    {
        if(p==NULL)
        {
            printf("\nThe list is empty");
            return;
        }

        if (p->lchild) preorder(p->lchild);
        if (p->rchild) preorder(p->rchild);
        printf("%d,",p->data);
    }
    void inorder(struct treenode *p)
    {
        if(p==NULL)
        {
            printf("\nThe list is empty");
            return;
        }

        if (p->lchild) preorder(p->lchild);
        printf("%d,",p->data);
        if (p->rchild) preorder(p->rchild);
    }

    int main(void)
    {
        root=NULL;
        int choice,data;

        while(1)
        {
         printf("\nPress 1 for inserting a node in BST fashion: ");
         printf("\nPress 2 for traversing the tree in preorder fashion :");
         printf("\nPress 3 for traversing the tree in postorder fashion :");
         printf("\nPress 4 for traversing the tree in inorder fashion :");
         printf("\nPress 5 to exit :");


         printf("\nEnter your choice: ");
         scanf("%d", &choice);

        switch(choice)
        {
        case 1: printf("\nEnter the data to be inserted:");
            scanf("%d",&data);
            insertnode( &root,data);
          
            break;

        case 2: preorder(root);
            break;

        case 3: postorder(root);
            break;

        case 4: inorder(root);
            break;

        case 5: exit(0);
            break;
        default: printf("\nYou have entered an invalid choice. Please try     again");
        }
    }

    return 0;
    }
Posted
Updated 17-May-18 22:52pm

1 solution

Your code must fill the rchild and lchild data with another tree.
C++
//allocate some tree
 struct treenode *lnode = malloc(sizeof(struct treenode));
//fill lnode with some data 
lnode->data = ....
(*pp)->lchildstruct = lnode;
Best is to write some time-saving functions like
C++
struct treenode *treeWithData(int data);
void setLeftChild(struct treenode *node, struct treenode *lNode);
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900