Голанг: Можно ли перенести указатель в методе struct pointer на другой экземпляр?

Я изучал Голанг и внедрял несколько структур данных, чтобы узнать, как работает язык. Я столкнулся со следующей проблемой при написании кода для дерева AVL:

Назначение первичного указателя из метода struct указателя, кажется, не имеет никакого эффекта вне области функции. Например.tree.rotateLeftToRoot() не приводит кtree.left становится новым деревом.

Вопрос: Есть ли способ переназначить указатель в методе struct pointer в Golang, или это вообще не рекомендуется? В примере это будет"tree = prevLeft" линия.

Фрагмент кода:

//Graphical representation of t.rotateLeftToRoot():
//      t                  L
//   L     R     ->    LL     t
//LL LR                     LR  R
func (tree *AvlTree) rotateLeftToRoot() {
   if tree == nil {
      return
   }
   prevLeft := tree.left
   if prevLeft != nil {
      tree.left = prevLeft.right //tree.left passed root its right branch
      prevLeft.right = tree      //tree becomes tree.left's right branch
      tree.updateHeight()
      prevLeft.updateHeight()
      tree = prevLeft            //desired behaviour: tree.left becomes the new tree
                                 //actual behaviour: no effect when function returns
   }
}

Я пробовал другие комбинации установки значения или адреса дерева, и ни одна из них не имела ожидаемого эффекта. Например,*tree = *prevLeft приводит к бесконечному циклу.

Дополнительное примечание: возвращениеtree и настройка"tree = tree.rotateLeftToRoot()" избегает проблемы. Это работает, но кажется грязным смешивать эффекты и требовать присваивания возвращаемых значений, когда вызывающая сторона действительно хочет иметь возможность вызвать функцию для обновления дерева.

Может лиtree быть настроенным наprevLeft изнутри функции?

Ответы на вопрос(1)

Ваш ответ на вопрос