From 9534c4ae06ced06f0cee7933c7c1e906372b4350 Mon Sep 17 00:00:00 2001 From: Bill Jacobs Date: Fri, 22 Jul 2016 17:03:36 -0700 Subject: [PATCH] Fixed RedBlackNode.concatenate on two one-node trees This fixes RedBlackNode.concatenate to work on two one-node trees. The check for determining which tree had the greater red-black height was incorrect in that case. --- RedBlackNode.jar | Bin 43553 -> 43647 bytes .../btrekkie/red_black_node/RedBlackNode.java | 12 +++++++----- .../btrekkie/tree_list/test/TreeListTest.java | 5 +++++ 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/RedBlackNode.jar b/RedBlackNode.jar index 354cdced979fab8f1b508a86ee9e0ea98e4063e0..f866453bbafcf5ccbf073e55cd95a7fe2c359065 100644 GIT binary patch delta 14834 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 Mc#v>;|5fJy0IPK0%>V!Z delta 14730 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 bK!^QDnHYpyCJeri3DPaYhpx){ANl_SEz__Q 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);