'This is generic in the sense that it will work with any kind of
tree (not just Tree interface).  It invokes the adaptor routines
not the tree node routines to do the construction.'

def dupTree(self, t, parent=None):

    if (t is None):
        return None
    newTree = self.dupNode(t)
    self.setChildIndex(newTree, self.getChildIndex(t))
    self.setParent(newTree, parent)
    for i in range(self.getChildCount(t)):
        child = self.getChild(t, i)
        newSubTree = self.dupTree(child, t)
        self.addChild(newTree, newSubTree)
    return newTree
