]> git.mdlowis.com Git - projs/libcds.git/commitdiff
refactor rbt_insert_node to remove (symmetrical) repitition
authora bellenir <a@bellenir.com>
Thu, 14 Aug 2014 05:58:52 +0000 (05:58 +0000)
committera bellenir <a@bellenir.com>
Thu, 14 Aug 2014 05:58:52 +0000 (05:58 +0000)
source/rbt/rbt.c

index 24742f2837b742cddb332d640d7154d65c8c9322..6f76709a335a0f2c0c4aabe93b0af198eb2244cf 100644 (file)
@@ -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);
                }
        }