The objective is to make a linked-list tree of groups of students of a subject. the tree should work with the subject being the root, the group leaders being the first level of leaves, and the members of the group branching from their respective group leaders. each leaf should show the name, id and role of the student. the output should traverse the tree in preorder. I've been on this problem for two days.
What I have tried:
This is my attempt so far. I cant get it to output the members but it lists the subject and the leaders in a broken way
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSTRINGSIZE 100
typedef struct treenode
{
char name[MAXSTRINGSIZE];
long id;
char role[MAXSTRINGSIZE];
struct treenode *leader1;
struct treenode *leader2;
struct treenode *leader3;
struct treenode *leader4;
struct treenode *leader5;
struct treenode *leader6;
struct treenode *leader7;
struct treenode *member1;
struct treenode *member2;
struct treenode *member3;
struct treenode *member4;
struct treenode *member5;
} treenode;
treenode *createnode(char name[], long id, char role[]) {
treenode *p;
p = malloc(sizeof(struct treenode));
if (p != NULL)
{
strcpy(p->name, name);
p->id = id;
strcpy(p->role, role);
p->leader1 = NULL;
p->leader2 = NULL;
p->leader3 = NULL;
p->leader4 = NULL;
p->leader5 = NULL;
p->leader6 = NULL;
p->leader7 = NULL;
p->member1 = NULL;
p->member2 = NULL;
p->member3 = NULL;
p->member4 = NULL;
p->member5 = NULL;
}
return(p);
}
void printtree(treenode *root)
{
if(root == NULL)
{
printf("---<empty>---\n");
return;
}
printf("%s \t", root->name);
printf("%d \t", root->id);
printf("%s \n", root->role);
printf("Group 1\n");
printtree(root->leader1);
printf("Group 2\n");
printtree(root->leader2);
printf("Group 3\n");
printtree(root->leader3);
printf("Group 4\n");
printtree(root->leader4);
printf("Group 5\n");
printtree(root->leader5);
printf("Group 6\n");
printtree(root->leader6);
printf("Group 7\n");
printtree(root->leader7);
}
int main()
{
treenode *n1 = createnode("EEE1111", 3333, "___");
treenode *n2 = createnode("AAA", 1181, "Group Leader");
treenode *n3 = createnode("BBB", 1201, "Group Leader");
treenode *n4 = createnode("CCC", 1209, "Group Leader");
treenode *n5 = createnode("DDD", 1191, "Group Leader");
treenode *n6 = createnode("FFF", 1183, "Group Leader");
treenode *n7 = createnode("GGG", 1197, "Group Leader");
treenode *n8 = createnode("HHH", 1199, "Group Leader");
treenode *n9 = createnode("III", 1171, "Member");
treenode *n10 = createnode("JJJ", 1185, "Member");
treenode *n11 = createnode("KKK", 1208, "Member");
treenode *n12 = createnode("LLL", 1193, "Member");
treenode *n13 = createnode("MMM", 1204, "Member");
treenode *n14 = createnode("NNN", 1192, "Member");
treenode *n15 = createnode("OOO", 12049, "Member");
treenode *n16 = createnode("PPP", 119215, "Member");
treenode *n17 = createnode("QQQ", 12286, "Member");
treenode *n18 = createnode("RRR", 11192, "Member");
treenode *n19 = createnode("SSS", 1926, "Member");
treenode *n20 = createnode("TTT", 119417, "Member");
treenode *n21 = createnode("UUU", 120225, "Member");
treenode *n22 = createnode("VVV", 11587, "Member");
treenode *n23 = createnode("WWW", 11101, "Member");
treenode *n24 = createnode("XXX", 10648, "Member");
treenode *n25 = createnode("YYY", 10779, "Member");
treenode *n26 = createnode("ZZZ", 1858, "Member");
treenode *n27 = createnode("ABC", 12222, "Member");
n1 -> leader1 = n2;
n1 -> leader2 = n3;
n1 -> leader3 = n4;
n1 -> leader4 = n5;
n1 -> leader5 = n6;
n1 -> leader6 = n7;
n1 -> leader7 = n8;
n2 -> member1 = n9;
n2 -> member2 = n10;
n3 -> member1 = n11;
n3 -> member2 = n12;
n4 -> member1 = n13;
n4 -> member2 = n14;
n4 -> member3 = n15;
n4 -> member4 = n16;
n5 -> member1 = n17;
n5 -> member2 = n18;
n5 -> member3 = n19;
n6 -> member1 = n20;
n6 -> member2 = n21;
n6 -> member3 = n22;
n7 -> member1 = n23;
n7 -> member2 = n24;
n7 -> member3 = n25;
n8 -> member1 = n26;
n8 -> member2 = n27;
printtree(n1);
return (0);
}