/* * tree.c * * Created by Yigit Colakoglu on 07/06/2021. * Copyright yigit@yigitcolakoglu.com. 2021. All rights reserved. */ #include "tree.h" #include "linkedlist.h" #include "urlparse.h" #include #include #include TreeNode *addtree(TreeNode *p, URL *url) { if (p == NULL) { TreeNode *newnode = treealloc(); newnode->path = url->base; newnode->params = url->params; newnode->left = newnode->right = NULL; return newnode; } int strdiff = strcmp(url->base, p->path); if (!strdiff) { while(url->params != NULL){ if(p->params == NULL || linkedlistfind(p->params, url->params->data) == -1){ p->params = linkedlistadd(p->params, url->params->data); } url->params = url->params->next; } } else if (strdiff < 0) { p->left = addtree(p->left, url); } else { p->right = addtree(p->right, url); } return p; } TreeNode *treealloc(void){ return (TreeNode *) malloc(sizeof(TreeNode)); } void printtree(TreeNode *root, FILE *out){ if(root != NULL){ printtree(root->left, out); fprintf(out, "%s ", root->path); linkedlistprint(root->params, out); fprintf(out, "%c", '\n'); printtree(root->right, out); } }