forked from bartvdbraak/blender
(See http://codereview.appspot.com/5431064/ for review of patch)
I've written a convenient function that returns the sibling of a node in the red-black tree implementation originally implemented by Joshua Leung. I want to use this get_sibling() function in the future to implement the missing removal function of the red-black tree implementation. For now the get_sibling() function just simplifies the get_uncle() function. Just like the rest of the red-black tree implementation this diff is based on Wikipedia: http://en.wikipedia.org/wiki/Red%E2%80%93black_tree#Removal
This commit is contained in:
parent
5acde0d24c
commit
03398cfa88
@ -287,20 +287,28 @@ static DLRBT_Node *get_grandparent (DLRBT_Node *node)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* get the sibling node (e.g. if node is left child of parent, return right child of parent) */
|
||||
static DLRBT_Node *get_sibling(DLRBT_Node *node)
|
||||
{
|
||||
if (node && node->parent) {
|
||||
if (node == node->parent->left)
|
||||
return node->parent->right;
|
||||
else
|
||||
return node->parent->left;
|
||||
}
|
||||
|
||||
/* sibling not found */
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* get the 'uncle' - the sibling of the parent - of the given node */
|
||||
static DLRBT_Node *get_uncle (DLRBT_Node *node)
|
||||
{
|
||||
DLRBT_Node *gpn= get_grandparent(node);
|
||||
if (node)
|
||||
/* return the child of the grandparent which isn't the node's parent */
|
||||
return get_sibling(node->parent);
|
||||
|
||||
/* return the child of the grandparent which isn't the node's parent */
|
||||
if (gpn) {
|
||||
if (gpn->left == node->parent)
|
||||
return gpn->right;
|
||||
else
|
||||
return gpn->left;
|
||||
}
|
||||
|
||||
/* not found */
|
||||
/* uncle not found */
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user