From d8c55a921752ed83d88c309ebed139a0fad9b686 Mon Sep 17 00:00:00 2001 From: a bellenir Date: Thu, 14 Aug 2014 06:11:52 +0000 Subject: [PATCH] remove symmetrical redundancy from rotation function --- source/rbt/rbt.c | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/source/rbt/rbt.c b/source/rbt/rbt.c index 6f76709..533c3b5 100644 --- a/source/rbt/rbt.c +++ b/source/rbt/rbt.c @@ -78,19 +78,15 @@ typedef enum { static void rotate(rbt_t* tree, rbt_node_t* node, direction_t direction){ rbt_node_t* edon = (direction == LEFT) ? node->right : node->left; if(edon){ + rbt_node_t** edon_side = (direction == LEFT ? &(edon->left) : &(edon->right)); + rbt_node_t** node_side = (direction == LEFT ? &(node->right) : &(node->left)); if(NULL == node->parent) tree->root = edon; else if(node->parent->left == node) node->parent->left = edon; else node->parent->right = edon; edon->parent = node->parent; - if(direction == LEFT){ - node->right = edon->left; //safe to overwrite node->right : is edon - if(edon->left) edon->left->parent = node; - edon->left = node; - } else { //mirror of above - node->left = edon->right; //safe to overwrite node->left : is edon - if(edon->right) edon->right->parent = node; - edon->right = node; - } + *node_side = *edon_side; //safe to overwrite; points to edon + if(*edon_side) (*edon_side)->parent = node; + *edon_side = node; node->parent = edon; } /* else rotation isn't allowed */ } -- 2.54.0