From f6aed92862e7969c3bdd08b3038b875b7bb57a9d Mon Sep 17 00:00:00 2001 From: David Ashby Date: Sun, 25 Jul 2021 21:41:12 -0400 Subject: [PATCH] eliminate recursive solution to finding rightmost node --- datastructures.go | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) 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