diff --git a/RedBlackNode.jar b/RedBlackNode.jar index 354cdced9..f866453bb 100644 Binary files a/RedBlackNode.jar and b/RedBlackNode.jar differ diff --git a/src/com/github/btrekkie/red_black_node/RedBlackNode.java b/src/com/github/btrekkie/red_black_node/RedBlackNode.java index 91685acba..73a8dc535 100644 --- a/src/com/github/btrekkie/red_black_node/RedBlackNode.java +++ b/src/com/github/btrekkie/red_black_node/RedBlackNode.java @@ -772,9 +772,10 @@ public abstract class RedBlackNode> implements Compara N parent; if (firstBlackHeight <= lastBlackHeight) { parent = null; - while (lastBlackHeight > firstBlackHeight) { + int blackHeight = lastBlackHeight; + while (blackHeight > firstBlackHeight) { if (!lastChild.isRed) { - lastBlackHeight--; + blackHeight--; } parent = lastChild; lastChild = lastChild.left; @@ -785,9 +786,10 @@ public abstract class RedBlackNode> implements Compara } } else { parent = null; - while (firstBlackHeight > lastBlackHeight) { + int blackHeight = firstBlackHeight; + while (blackHeight > lastBlackHeight) { if (!firstChild.isRed) { - firstBlackHeight--; + blackHeight--; } parent = firstChild; firstChild = firstChild.right; @@ -802,7 +804,7 @@ public abstract class RedBlackNode> implements Compara pivot.isRed = true; pivot.parent = parent; if (parent != null) { - if (parent.left == lastChild) { + if (firstBlackHeight < lastBlackHeight) { parent.left = pivot; } else { parent.right = pivot; diff --git a/src/com/github/btrekkie/tree_list/test/TreeListTest.java b/src/com/github/btrekkie/tree_list/test/TreeListTest.java index f59a86f0b..c1e335c85 100644 --- a/src/com/github/btrekkie/tree_list/test/TreeListTest.java +++ b/src/com/github/btrekkie/tree_list/test/TreeListTest.java @@ -72,6 +72,11 @@ public class TreeListTest { assertEquals(6, list.get(2).intValue()); assertEquals(null, list.get(5)); + list = new TreeList(); + list.add(7); + list.addAll(Collections.singleton(37)); + assertEquals(Arrays.asList(7, 37), list); + list = new TreeList(); for (int i = 0; i < 200; i++) { list.add(i + 300);