from collections import deque
from structures import TreeNode

def build_binary_tree(values):
    if not values or values[0] is None:
        return None
    root = TreeNode(values[0])
    queue = deque([root])
    i = 1
    while queue and i < len(values):
        parent = queue.popleft()
        for side in ('left', 'right'):
            if i == len(values):
                break
            value = values[i]
            i += 1
            if value is not None:
                child = TreeNode(value)
                setattr(parent, side, child)
                queue.append(child)
    return root

def serialize_binary_tree(root):
    output, queue = [], deque([root])
    while queue:
        node = queue.popleft()
        output.append(None if node is None else node.val)
        if node is not None:
            queue.extend((node.left, node.right))
    while output and output[-1] is None:
        output.pop()
    return output
