/** * parent parent * | successor \\ * v 2 v * 2(b) ------------> - * / \ * - - * */ void test_removeNextLargerSuccessor_remove_2_from_the_tree_with_2_node(void) { setNode(&node2, NULL, NULL, 'b'); Node *parent = &node2; Node *removeNode; removeNode = removeNextLargerSuccessor(&parent); TEST_ASSERT_NULL(parent); TEST_ASSERT_EQUAL(1, isDoubleBlack(&parent, removeNode)); }
void test_isDoubleBlack_given_a_node_with_black_color_should_return_0(void) { int result; setNode(&node4, NULL, NULL, 'b'); setNode(&node3, NULL, NULL, 'r'); Node *root = &node4; Node *removeNode = &node3; result = isDoubleBlack(&root, removeNode); TEST_ASSERT_EQUAL(0, result); }
Node *removeNextLargerSuccessor(Node **parentPtr){ Node *parent = *parentPtr, *removeNode; if(parent->left == NULL && parent->right == NULL){ removeNode = *parentPtr; *parentPtr = NULL; } else if(parent->left){ removeNode = removeNextLargerSuccessor(&(*parentPtr)->left); if(isDoubleBlack((*parentPtr)->left, removeNode)) caseSelectForSucessor(&(*parentPtr)); } else{ removeNode = parent; *parentPtr = parent->right; (*parentPtr)->color = parent->color; } return removeNode; }