code: public Tree<T> addSubtree( Tree<T> subtree )
      {
          Tree<T> copy = addLeaf( subtree.data );
          copy.children = new ArrayList<Tree<T>>( subtree.children );
          return copy;
      }
docs: Add a subtree, provided tree is not modified.
  
  @param subtree
  @return subtree copy added