def dfs(root):
    if not root:
        return []

    stack = [root]
    traversal = []

    while stack:
        node = stack.pop()
        traversal.append(node.value)

        if node.right:
            stack.append(node.right)
        if node.left:
            stack.append(node.left)

    return traversal