code: def build_full_tree(depth, child_per_parent=2, starting_objective=1):
      """Build a full tree
  
      Parameters
      ----------
      depth: int
          Depth of the tree
  
      child_per_parent: int, optional
          Number of child per node. Default: 2
      """
  
      def create_node_item(node_index):
          return TrialStub(id=f"id-{node_index}", objective=node_index)
  
      node_index = starting_objective
      root = LineageNode(create_node_item(node_index))
      node_index += 1
      node_buffer = [root]
      next_nodes = []
      for i in range(depth - 1):
          for node in node_buffer:
              for k in range(child_per_parent):
                  next_nodes.append(
                      LineageNode(
                          create_node_item(node_index), parent=node
                      )
                  )
                  node_index += 1
          node_buffer = next_nodes
          next_nodes = []
  
      print_tree(root, nameattr="tree_name")
  
      return root
  
imports: from orion.algo.pbt.exploit import BaseExploit
  from orion.algo.pbt.explore import BaseExplore
  from orion.algo.pbt.pbt import LineageNode, Lineages
  from orion.core.utils.pptree import print_tree
  from orion.core.worker.trial import Trial
label_desc: Use image node_id 1 for calling a global function with example usage: build_full_tree(depth, child_per_parent, starting_objective) and returns: root, TrialStub