title: How do you perform a deep copy of a ternary tree in Go?
body: <p>I'm attempting to perform a deep copy of the following struct: </p>
  
  <pre><code>// Ternary Tree
  type Tree struct {
      Left  *Tree
      Mid *Tree
      Right *Tree
      Value interface{}
      Parent *Tree
      Orientation string
      IsTerminal bool
      Type string
  }
  </code></pre>
  
  <p>The following is my sorry attempt. It looks like I'm creating a new tree at the root but it's children are still pointing to the same address in memory. </p>
  
  <pre><code>func (tree *Tree) CopyTree() *Tree {
      if (tree == nil) {
          return nil
      } else {
          copiedTree := &amp;Tree {
              tree.Left.CopyTree(),
              tree.Mid.CopyTree(),
              tree.Right.CopyTree(),
              tree.Value,
              tree.Parent.CopyTree(),
              tree.Orientation,
              tree.IsTerminal,
              tree.Type}
          return copiedTree
      }
  }
  </code></pre>
  
  <p>Are there any useful constructs in go that assist with deep copying a struct? If not, how would I perform this deep copy myself? Note, the "<a href="http://godoc.org/code.google.com/p/rog-go/exp/deepcopy" rel="noreferrer">deepcopy</a>" package no longer works as it uses a few functions that were deprecated with the release of Go 1</p>