// root. If found, the parent of the branch is the successor.
// Otherwise, we return the null node
const RBNode<T>* parent = current->getParent();
- while (parent != RBNode<T>::NULL_NODE() &&
- current == (parent->*right).get()) {
+ while ((!current->isSubTreeRoot()) &&
+ (current == (parent->*right).get())) {
current = parent;
parent = parent->getParent();
}
- return (parent);
+
+ if (!current->isSubTreeRoot()) {
+ return (parent);
+ } else {
+ return (RBNode<T>::NULL_NODE());
+ }
}
template <typename T>
RBNode<T>* const parent = node->getParent();
right->parent_ = parent;
- if (parent != NULLNODE) {
+ if (!node->isSubTreeRoot()) {
right->setSubTreeRoot(false);
if (node == parent->getLeft()) {
parent->left_ = right;
RBNode<T>* const parent = node->getParent();
left->parent_ = parent;
- if (node->getParent() != NULLNODE) {
+ if (!node->isSubTreeRoot()) {
left->setSubTreeRoot(false);
if (node == parent->getRight()) {
parent->right_ = left;