From cd4424b94a2aed95859dd6ad34e28a151d71acec Mon Sep 17 00:00:00 2001 From: Bill Jacobs Date: Thu, 2 Jun 2016 20:40:35 -0700 Subject: [PATCH] Fixed calls to augment() in fixSiblingDeletion() This fixes fixSiblingDeletion() to call augment() in certain cases where augment() returns false. --- RedBlackNode.jar | Bin 43393 -> 43546 bytes .../btrekkie/red_black_node/RedBlackNode.java | 30 +++++++++++++++--- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/RedBlackNode.jar b/RedBlackNode.jar index 1cb1d9866eb60a42e3caf5c9481b16f0f2967ffe..c6adc61fb40e049e1fba270ed06b5518aad9de22 100644 GIT binary patch delta 9966 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 O$fS}Owmk12>Hh(+oD^aJ delta 9741 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 qu-M^3LA|g-LGk>Llx4)> implements Compara private void fixSiblingDeletion() { RedBlackNode sibling = this; boolean changed = true; + boolean haveAugmentedParent = false; + boolean haveAugmentedGrandparent = false; while (true) { N parent = sibling.parent; if (sibling.isRed) { @@ -480,13 +482,15 @@ public abstract class RedBlackNode> implements Compara changed = parent.rotateLeft(); sibling = parent.right; } + haveAugmentedParent = true; + haveAugmentedGrandparent = true; } else if (!sibling.left.isRed && !sibling.right.isRed) { sibling.isRed = true; if (parent.isRed) { parent.isRed = false; break; } else { - if (changed) { + if (changed && !haveAugmentedParent) { changed = parent.augment(); } N grandparent = parent.parent; @@ -497,6 +501,8 @@ public abstract class RedBlackNode> implements Compara } else { sibling = grandparent.left; } + haveAugmentedParent = haveAugmentedGrandparent; + haveAugmentedGrandparent = false; } } else { if (sibling == parent.left) { @@ -517,14 +523,28 @@ public abstract class RedBlackNode> implements Compara sibling.right.isRed = false; changed = parent.rotateLeft(); } + haveAugmentedParent = haveAugmentedGrandparent; + haveAugmentedGrandparent = false; break; } } - if (changed) { - for (N parent = sibling.parent; parent != null; parent = parent.parent) { - if (!parent.augment()) { - break; + N parent = sibling.parent; + if (changed && parent != null) { + if (!haveAugmentedParent) { + changed = parent.augment(); + } + if (changed && parent.parent != null) { + parent = parent.parent; + if (!haveAugmentedGrandparent) { + changed = parent.augment(); + } + if (changed) { + for (parent = parent.parent; parent != null; parent = parent.parent) { + if (!parent.augment()) { + break; + } + } } } }