Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Tree {
char* token;
int level;
struct Tree* child;
struct Tree* sibling;
} Tree;
Tree* newNode(char* token, int level) {
Tree* node = (Tree*)malloc(sizeof(Tree));
node -> token = token;
node -> level = level;
node -> child = NULL;
node -> sibling = NULL;
return node;
}
void insertTree(Tree** rootRef, char* token, char* parent, int level, int currentLevel) {
Tree *root = *rootRef;
if(NULL == root) {
*rootRef = newNode(token, level);
printf("Successfully Inserted: %s at level = %d\n", token, level);
}
else {
if(currentLevel == level) {
printf("Found %s, level = %d, currentLevel = %d, parent = %s going to sibling\n", root -> token, root -> level, currentLevel, parent);
insertTree(&(root -> sibling), token, parent, level, currentLevel);
}
else if(currentLevel == level - 1) {
if(!strcmp(parent, root -> token)) {
printf("Found %s, level = %d, currentLevel = %d, parent = %s going to child\n", root -> token, root -> level, currentLevel, parent);
insertTree(&(root -> child), token, parent, level, currentLevel + 1);
}
else if(NULL != root -> sibling) {
printf("Found %s, level = %d, currentLevel = %d, parent = %s going to sibling\n", root -> token, root -> level, currentLevel, parent);
insertTree(&(root -> sibling), token, parent, level, currentLevel);
}
else {
printf("Found %s, level = %d, currentLevel = %d, parent = %s going to child\n", root -> token, root -> level, currentLevel, parent);
insertTree(&(root -> child), token, parent, level, currentLevel + 1);
}
}
else {
printf("Found %s, level = %d, currentLevel = %d, parent = %s going to child\n", root -> token, root -> level, currentLevel, parent);
insertTree(&(root -> child), token, parent, level, currentLevel + 1);
}
}
}
void displayTree(Tree* root) {
if(NULL == root)
return;
putchar('\n');
for(int i = 0; i < root -> level; i++)
printf("----");
printf("%s", root -> token);
displayTree(root -> child);
displayTree(root -> sibling);
}
int main(int argc, char *argv[]) {
Tree* root = NULL;
puts("Inserting ISPROPYL");
insertTree(&root, "ISPROPYL", NULL, 0, 0);
puts("\nInserting START");
insertTree(&root, "START", "ISPROPYL", 1, 0);
puts("\nInserting OUT_STMT");
insertTree(&root, "OUT_STMT", "ISPROPYL", 1, 0);
puts("\nInserting getout");
insertTree(&root, "getout", "OUT_STMT", 2, 0);
puts("\nInserting lss_thn_op");
insertTree(&root, "lss_thn_op", "OUT_STMT", 2, 0);
puts("\nInserting OUTPUT_STMT");
insertTree(&root, "OUTPUT_STMT", "OUT_STMT", 2, 0);
puts("\nInserting identifier");
insertTree(&root, "identifier", "OUTPUT_STMT", 3, 0);
puts("\nInserting grt_thn_op");
insertTree(&root, "grt_thn_op", "OUT_STMT", 2, 0);
puts("\nInserting trmntr_stmnt");
insertTree(&root, "trmntr_stmnt", "OUT_STMT", 2, 0);
puts("\nInserting END");
insertTree(&root, "END", "ISPROPYL", 1, 0);
displayTree(root);
putchar('\n');
return 0;
}
I have a problem on the