code: def build(values):
      
      nodes = [None if v is None else Node(v) for v in values]
  
      for index in range(1, len(nodes)):
          node = nodes[index]
          if node is not None:
              parent_index = (index - 1) // 2
              parent = nodes[parent_index]
              if parent is None:
                  raise NodeNotFoundError(
                      'parent node missing at index {}'.format(parent_index))
              setattr(parent, 'left' if index % 2 else 'right', node)
  
      return nodes[0] if nodes else None
docs: Build a tree from `list representation`_ and return its root node.
  
      .. _list representation:
          https://en.wikipedia.org/wiki/Binary_tree#Arrays
  
      :param values: List representation of the binary tree, which is a list of
          node values in breadth-first order starting from the root (current
          node). If a node is at index i, its left child is always at 2i + 1,
          right child at 2i + 2, and parent at floor((i - 1) / 2). None indicates
          absence of a node at that index. See example below for an illustration.
      :type values: [int | float | None]
      :return: Root node of the binary tree.
      :rtype: binarytree.Node
      :raise binarytree.exceptions.NodeNotFoundError: If the list representation
          is malformed (e.g. a parent node is missing).
  
      **Example**:
  
      .. doctest::
  
          >>> from binarytree import build
          >>>
          >>> root = build([1, 2, 3, None, 4])
          >>>
          >>> print(root)
          <BLANKLINE>
            __1
           /   \\
          2     3
           \\
            4
          <BLANKLINE>
  
      .. doctest::
  
          >>> from binarytree import build
          >>>
          >>> root = build([None, 2, 3])  # doctest: +IGNORE_EXCEPTION_DETAIL
          Traceback (most recent call last):
           ...
          NodeNotFoundError: parent node missing at index 0