Skip to content

Commit c6df81b

Browse files
committed
short circuit close nephew branch in RedBlackTree#delete
1 parent b757c0b commit c6df81b

File tree

1 file changed

+6
-8
lines changed

1 file changed

+6
-8
lines changed

lib/red-black-tree.rb

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,12 @@ def delete! node
174174
rotate_sub_tree! node.parent, node.position
175175
end
176176

177+
if node.close_nephew && node.close_nephew.valid? && node.close_nephew.red?
178+
node.sibling.red! unless node.sibling.leaf?
179+
node.close_nephew.black!
180+
rotate_sub_tree! node.sibling, node.opposite_position
181+
end
182+
177183
if node.distant_nephew && node.distant_nephew.valid? && node.distant_nephew.red?
178184
case node.parent.colour
179185
when Node::RED then node.sibling.red!
@@ -186,14 +192,6 @@ def delete! node
186192
break
187193
end
188194

189-
if node.close_nephew && node.close_nephew.valid? && node.close_nephew.red?
190-
node.sibling.red! unless node.sibling.leaf?
191-
node.close_nephew.black!
192-
rotate_sub_tree! node.sibling, node.opposite_position
193-
194-
next
195-
end
196-
197195
if node.parent && node.parent.red?
198196
node.sibling.red! unless node.sibling.leaf?
199197
node.parent.black!

0 commit comments

Comments
 (0)