If I had to do this in production code I wouldn't do it that way (for a start I prefer static data structures where possible). I'd have 2 classes: BinaryTree and DoubleLinkedList, each of which would have a constructor that takes a list as input, and a function that returns the data as a list:
class BinaryTree:
def __init__(self, data: List):
""" create from a list """
def asList(self)->List:
""" return my data as a list """
class DoubleLinkedList:
def __init__(self, data: List):
""" create from a list """
def asList(self)->List:
""" return my data as a list """
Then making a binary tree from a double-linked list is simply:
BinaryTree(dll.asList())