diff --git a/datastructures.go b/datastructures.go index 59ba36a..50f62cf 100644 --- a/datastructures.go +++ b/datastructures.go @@ -107,16 +107,17 @@ func (sbt *StringyBTreeNode) getNode(k string) *StringyBTreeNode { return nil // not found } -func (sbt *StringyBTreeNode) rightmost(parent *StringyBTreeNode) (*StringyBTreeNode, *StringyBTreeNode) { - if sbt.right == nil { - return parent, sbt - } - return sbt.right.(*StringyBTreeNode).rightmost(sbt) -} - // swap the rightmost node to the node we're removing func (sbt *StringyBTreeNode) Delete(k string) *StringyBTreeNode { - parent, rightmost := sbt.rightmost(nil) + parent := sbt + rightmost := sbt + for { + if rightmost.right == nil { + break + } else { + parent, rightmost = rightmost, parent.right.(*StringyBTreeNode) + } + } delete := sbt.getNode(k) delete.k = rightmost.k delete.v = rightmost.v