docs: def name_tree(tree):
      """
      Names all the tree nodes that are not named or have non-unique names, with unique names.
  
      :param tree: tree to be named
      :type tree: ete3.Tree
  
      :return: void, modifies the original tree
      """
      existing_names = Counter((_.name for _ in tree.traverse() if _.name))
      if sum(1 for _ in tree.traverse()) == len(existing_names):
          return
      i = 0
      existing_names = Counter()
      for node in tree.traverse('preorder'):
          name = node.name if node.is_leaf() else ('root' if node.is_root() else None)
          while name is None or name in existing_names:
              name = '{}{}'.format('t' if node.is_leaf() else 'n', i)
              i += 1
          node.name = name
          existing_names[name] += 1