code: def _push_subtree(self, leaves: List[bytes]):
          size = len(leaves)
          if count_bits_set(size) != 1:
              raise ValueError("invalid subtree with size != 2^k: %s" % size)
          subtree_h, mintree_h = lowest_bit_set(size), self.__mintree_height
          if mintree_h > 0 and subtree_h > mintree_h:
              raise ValueError("subtree %s > current smallest subtree %s" % (
                  subtree_h, mintree_h))
          root_hash, hashes = self.__hasher._hash_full(leaves, 0, size)
          assert hashes == (root_hash,)
          if self.hashStore:
              for h in hashes:
                  self.hashStore.writeLeaf(h)
          new_node_hashes = self.__push_subtree_hash(subtree_h, root_hash)
          nodes = [(self.tree_size, height, h) for h, height in new_node_hashes]
          if self.hashStore:
              for node in nodes:
                  self.hashStore.writeNode(node)