From 345371da2620be1b8bdd8c89aed0db74c9b591d5 Mon Sep 17 00:00:00 2001 From: Sameer Achhab Date: Fri, 2 Dec 2022 22:06:43 +0530 Subject: [PATCH] Replaced recursive search algorithm with iterative algorithm. It does the same thing but doesn't take up a lot of stack frames. --- src/Routes.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/Routes.c b/src/Routes.c index 367d3ef..ed553d5 100644 --- a/src/Routes.c +++ b/src/Routes.c @@ -39,17 +39,17 @@ struct Route * addRoute(struct Route * root, char* key, char* value) { } struct Route * search(struct Route * root, char* key) { - if (root == NULL) { - return NULL; - } - - if (strcmp(key, root->key) == 0){ - return root; - }else if (strcmp(key, root->key) > 0) { - return search(root->right, key); - }else if (strcmp(key, root->key) < 0) { - return search(root->left, key); - } - + struct Route *selected=root; + while (selected != NULL) { + if (strcmp(key, selected->key) == 0) { + return selected; + } + else if (strcmp(key, selected->key) > 0) { + selected=selected->right; + }else if (strcmp(key, selected->key) < 0) { + selected=selected->left; + } + } + return NULL; }