From 14847d11ed6bb12f00db044e7fafafd23ddba736 Mon Sep 17 00:00:00 2001 From: a bellenir Date: Thu, 14 Aug 2014 05:58:52 +0000 Subject: [PATCH] refactor rbt_insert_node to remove (symmetrical) repitition --- source/rbt/rbt.c | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/source/rbt/rbt.c b/source/rbt/rbt.c index 24742f2..6f76709 100644 --- a/source/rbt/rbt.c +++ b/source/rbt/rbt.c @@ -138,20 +138,14 @@ static void rbt_insert_node(rbt_t* tree, rbt_node_t* node, rbt_node_t* parent){ if(NULL == parent){ /* inserting root of the tree */ tree->root = node; rbt_ins_recolor(tree, node); - }else if(tree->comp(node->contents, parent->contents) < 0){ - if(parent->left){ - rbt_insert_node(tree, node, parent->left); - }else{ - node->parent = parent; - parent->left = node; - rbt_ins_recolor(tree, node); - } }else{ - if(parent->right){ - rbt_insert_node(tree, node, parent->right); + int c = tree->comp(node->contents, parent->contents); + rbt_node_t** relevant_child = (c<0 ? &(parent->left) : &(parent->right)); + if(*relevant_child){ + rbt_insert_node(tree, node, *relevant_child); }else{ node->parent = parent; - parent->right = node; + *relevant_child = node; rbt_ins_recolor(tree, node); } } -- 2.49.0