Click here to Skip to main content
13,734,927 members
Rate this:
 
Please Sign up or sign in to vote.
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 17-May-18 5:34am
Updated 17-May-18 22:52pm

1 solution

Rate this: bad
 
good
Please Sign up or sign in to vote.

Solution 1

Your code must fill the rchild and lchild data with another tree.
//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
struct treenode *treeWithData(int data);
void setLeftChild(struct treenode *node, struct treenode *lNode);
  Permalink  

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

  Print Answers RSS
Top Experts
Last 24hrsThis month


Advertise | Privacy | Cookies | Terms of Service
Web05-2016 | 2.8.180920.1 | Last Updated 18 May 2018
Copyright © CodeProject, 1999-2018
All Rights Reserved.
Layout: fixed | fluid

CodeProject, 503-250 Ferrand Drive Toronto Ontario, M3C 3G8 Canada +1 416-849-8900 x 100