Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

My C proggram is having trouble in the switch in main. Also the a couple of funt

ID: 3938184 • Letter: M

Question

My C proggram is having trouble in the switch in main. Also the a couple of funtion like delete and display tree are failing

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

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

struct tree_node {
    int data;
    struct tree_node *left, *right;
};

typedef struct nodeT {
    int key;
    struct nodeT *left, *right;
    int data;
} nodeT, *treeT;
//struct nodeT *t1, *t2;
void DisplayTree(nodeT*t)
{
    if (t != NULL) {
        DisplayTree(t->left);
        printf("%c ", t->key);
        DisplayTree(t->right);
    }
}

nodeT *FindNode(nodeT *t, int key){
    if(t==NULL) return 0;
    if (key == t->key)
        return t;
    if(key < t->key){
        return FindNode(t->left, key);;
    } else {
        return FindNode(t->right, key);;
    }
}

int max(nodeT *p){
    nodeT *t, *tmp;
    while(tmp->right != NULL)
        tmp=tmp->right;
    return tmp->data;
}

int min(nodeT *t){
    nodeT *tmp;
    while(tmp->left != NULL)
        tmp = tmp->left;
    return tmp->data;
}

void ModifyPreOrderWalk(nodeT *t, int h)
{
    int i;
    if (t == NULL) return;
    for(i=0; i<-1;i++){
        printf("|   ");
    }
    if(h>1)printf("+---");
    printf("%d “", t->key);
    ModifyPreOrderWalk(t->left, h+1);
    ModifyPreOrderWalk(t->right, h+1);
}

void PrintTree(nodeT *t)
{
    ModifyPreOrderWalk(t, 1);
}

void delete(nodeT **p){
    nodeT *target, *imd_r, *plmd_r;
    target=*p;
    if (target->left==NULL && target->right==NULL) {
        *p=NULL;
    } else if (target->left == NULL) {
        *p=target->right;
    } else
        if (target->right == NULL) {
            *p=target->left;
        } else {
            plmd_r = target;
            imd_r = target->right;
            while( imd_r->left != NULL){
                plmd_r = imd_r;
                imd_r = imd_r->left;
            }
            if(plmd_r == target)
                plmd_r->right = imd_r->right;
            else
                plmd_r->left = imd_r->right;
            imd_r->left = target->left;
            imd_r->right = target->right;
            *p = imd_r;
        }
    free(target);
}

void listInorder(nodeT *t){
    if (t != NULL) {
        DisplayTree(t->left);
        printf("%d ", t->key);
        DisplayTree(t->right);
    }


}
void listPreorder(nodeT *t) {
    if (t != NULL) {
        printf("%d ", t->key);
        DisplayTree(t->left);
        DisplayTree(t->right);
    }

}

void listPostOrder(nodeT *t){
    if (t != NULL) {
        DisplayTree(t->left);
        DisplayTree(t->right);
        printf("%d", t->key);
    }

}
void InsertNode(nodeT **tptr, int key){
    nodeT *t;
    nodeT *tmp;
    t=*tptr;
    if (t == NULL) {
        tmp= malloc(sizeof(nodeT));
        tmp->key = key;
        tmp->left=tmp->right=NULL;
        *tptr=tmp;
        return;
    }
    if (key < t->key) {
        InsertNode
            (&t->left, key);
    } else {
        InsertNode(&t->right, key);
    }

}

int height(nodeT *t){
    int lDepth = height(t->left);
    int rDepth = height(t->right);
    if(lDepth > rDepth)
        return(lDepth+1);
    else
        return(rDepth+1);


}
int sum(nodeT *p){
    if (p == NULL)
        return 0;
    else
        return (p->data + sum(p->left) +sum(p->right) );
}


int count(nodeT *t){
    if(t == NULL)
        return 0;

    int i = 1+count(t->left)+count(t->right);
    return i;
}

/*nodeT *New(){
nodeT *tmp;
tmp = (nodeT *)malloc(sizeof(nodeT));
if (tmp==NULL) return NULL;
return tmp;
}*/


int main(){
    nodeT *node;
    nodeT *t=NULL, *findA;
    int f;
    int d, a, b, c, j, k, e, s, y;


    while (1) {
        printf(" I - insert F - find node D - delete L - list in order R - list preorder P - list PorstOrder M - max N - min H - height C - count S - sum W - display tree Q - quit ");
        printf("> ");
       // char line = GetLine();
        char ch;// = toupper(line[0]);
        scanf("%c",&ch);
        switch (ch) {
            // plmd_r->left = imd_r->right;
            case 'I': scanf("%d",&y); InsertNode(&t,y); break;
            case 'F':printf("enter value you are tyring to find ");
                     scanf("%d ", &f);
                     FindNode(t, f); break;
            case 'D':printf("enter value you are tyring to delete ");
                     findA= FindNode(t,f);
                     delete(&findA); break;
            case 'L': listInorder(t); break;
            case 'R': listPreorder(t); break;
            case 'P': listPostOrder(t); break;
            case 'M': j=max(t);
                      //printf("%d ", &j);
                      break;
            case 'N': c= min(t);
                      // printf("%d ", &c);
                      break;
            case 'H': k= height(t);
                      // printf("%d ", &k);
                      break;
            case 'C': e=count(t);
                      //printf("%d " &e);
                      break;
            case 'S': s=sum(t);
                      // printf("%d ", &s);
                      break;
            case 'W': DisplayTree(t);
            case 'Q': exit(0);
           // default:printf("Illegal command "); break;
        }
    }


}

struct tree_node {
    int data;
    struct tree_node *left, *right;
};

typedef struct nodeT {
    int key;
    struct nodeT *left, *right;
    int data;
} nodeT, *treeT;
//struct nodeT *t1, *t2;
void DisplayTree(nodeT*t)
{
    if (t != NULL) {
        DisplayTree(t->left);
        printf("%c ", t->key);
        DisplayTree(t->right);
    }
}

nodeT *FindNode(nodeT *t, int key){
    if(t==NULL) return 0;
    if (key == t->key)
        return t;
    if(key < t->key){
        return FindNode(t->left, key);;
    } else {
        return FindNode(t->right, key);;
    }
}

int max(nodeT *p){
    nodeT *t, *tmp;
    while(tmp->right != NULL)
        tmp=tmp->right;
    return tmp->data;
}

int min(nodeT *t){
    nodeT *tmp;
    while(tmp->left != NULL)
        tmp = tmp->left;
    return tmp->data;
}

void ModifyPreOrderWalk(nodeT *t, int h)
{
    int i;
    if (t == NULL) return;
    for(i=0; i<-1;i++){
        printf("|   ");
    }
    if(h>1)printf("+---");
    printf("%d “", t->key);
    ModifyPreOrderWalk(t->left, h+1);
    ModifyPreOrderWalk(t->right, h+1);
}

void PrintTree(nodeT *t)
{
    ModifyPreOrderWalk(t, 1);
}

void delete(nodeT **p){
    nodeT *target, *imd_r, *plmd_r;
    target=*p;
    if (target->left==NULL && target->right==NULL) {
        *p=NULL;
    } else if (target->left == NULL) {
        *p=target->right;
    } else
        if (target->right == NULL) {
            *p=target->left;
        } else {
            plmd_r = target;
            imd_r = target->right;
            while( imd_r->left != NULL){
                plmd_r = imd_r;
                imd_r = imd_r->left;
            }
            if(plmd_r == target)
                plmd_r->right = imd_r->right;
            else
                plmd_r->left = imd_r->right;
            imd_r->left = target->left;
            imd_r->right = target->right;
            *p = imd_r;
        }
    free(target);
}

void listInorder(nodeT *t){
    if (t != NULL) {
        DisplayTree(t->left);
        printf("%d ", t->key);
        DisplayTree(t->right);
    }


}
void listPreorder(nodeT *t) {
    if (t != NULL) {
        printf("%d ", t->key);
        DisplayTree(t->left);
        DisplayTree(t->right);
    }

}

void listPostOrder(nodeT *t){
    if (t != NULL) {
        DisplayTree(t->left);
        DisplayTree(t->right);
        printf("%d", t->key);
    }

}
void InsertNode(nodeT **tptr, int key){
    nodeT *t;
    nodeT *tmp;
    t=*tptr;
    if (t == NULL) {
        tmp= malloc(sizeof(nodeT));
        tmp->key = key;
        tmp->left=tmp->right=NULL;
        *tptr=tmp;
        return;
    }
    if (key < t->key) {
        InsertNode
            (&t->left, key);
    } else {
        InsertNode(&t->right, key);
    }

}

int height(nodeT *t){
    int lDepth = height(t->left);
    int rDepth = height(t->right);
    if(lDepth > rDepth)
        return(lDepth+1);
    else
        return(rDepth+1);


}
int sum(nodeT *p){
    if (p == NULL)
        return 0;
    else
        return (p->data + sum(p->left) +sum(p->right) );
}


int count(nodeT *t){
    if(t == NULL)
        return 0;

    int i = 1+count(t->left)+count(t->right);
    return i;
}

/*nodeT *New(){
nodeT *tmp;
tmp = (nodeT *)malloc(sizeof(nodeT));
if (tmp==NULL) return NULL;
return tmp;
}*/


int main(){
    nodeT *node;
    nodeT *t=NULL, *findA;
    int f;
    int d, a, b, c, j, k, e, s, y;


    while (1) {
        printf(" I - insert F - find node D - delete L - list in order R - list preorder P - list PorstOrder M - max N - min H - height C - count S - sum W - display tree Q - quit ");
        printf("> ");
       // char line = GetLine();
        char ch;// = toupper(line[0]);
        scanf("%c",&ch);
        switch (ch) {
            // plmd_r->left = imd_r->right;
            case 'I': scanf("%d",&y); InsertNode(&t,y); break;
            case 'F':printf("enter value you are tyring to find ");
                     scanf("%d ", &f);
                     FindNode(t, f); break;
            case 'D':printf("enter value you are tyring to delete ");
                     findA= FindNode(t,f);
                     delete(&findA); break;
            case 'L': listInorder(t); break;
            case 'R': listPreorder(t); break;
            case 'P': listPostOrder(t); break;
            case 'M': j=max(t);
                      //printf("%d ", &j);
                      break;
            case 'N': c= min(t);
                      // printf("%d ", &c);
                      break;
            case 'H': k= height(t);
                      // printf("%d ", &k);
                      break;
            case 'C': e=count(t);
                      //printf("%d " &e);
                      break;
            case 'S': s=sum(t);
                      // printf("%d ", &s);
                      break;
            case 'W': DisplayTree(t);
            case 'Q': exit(0);
           // default:printf("Illegal command "); break;
        }
    }


}

Explanation / Answer

Answer:

There should be :

return 0 ;

As last line of int main() As return value is int...!!!

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote