code: def render_tree(tree, list_all=True, show_only=None, frozen=False, exclude=None):
      
      tree = sorted_tree(tree)
      branch_keys = set(r.key for r in flatten(tree.values()))
      nodes = tree.keys()
      use_bullets = not frozen
  
      key_tree = dict((k.key, v) for k, v in tree.items())
      get_children = lambda n: key_tree.get(n.key, [])
  
      if show_only:
          nodes = [p for p in nodes
                   if p.key in show_only or p.project_name in show_only]
      elif not list_all:
          nodes = [p for p in nodes if p.key not in branch_keys]
  
      def aux(node, parent=None, indent=0, chain=None):
          if exclude and (node.key in exclude or node.project_name in exclude):
              return []
          if chain is None:
              chain = [node.project_name]
          node_str = node.render(parent, frozen)
          if parent:
              prefix = ' '*indent + ('- ' if use_bullets else '')
              node_str = prefix + node_str
          result = [node_str]
          children = [aux(c, node, indent=indent+2,
                          chain=chain+[c.project_name])
                      for c in get_children(node)
                      if c.project_name not in chain]
          result += list(flatten(children))
          return result
  
      lines = flatten([aux(p) for p in nodes])
      return '\n'.join(lines)
docs: Convert tree to string representation
  
      :param dict tree: the package tree
      :param bool list_all: whether to list all the pgks at the root
                            level or only those that are the
                            sub-dependencies
      :param set show_only: set of select packages to be shown in the
                            output. This is optional arg, default: None.
      :param bool frozen: whether or not show the names of the pkgs in
                          the output that's favourable to pip --freeze
      :param set exclude: set of select packages to be excluded from the
                            output. This is optional arg, default: None.
      :returns: string representation of the tree
      :rtype: str