def createMinimalBST(arr: list, start: int, end: int) -> TreeNode:
    if start > end:
        return None

    mid = start + (end - start) // 2
    new_node = TreeNode(arr[mid])
    new_node.addLeft(createMinimalBST(arr, start, mid - 1))
    new_node.addRight(createMinimalBST(arr, mid + 1, end))
    return new_node
    levelOrderTraverse(node.right, lists, level + 1)


if __name__ == "__main__":
    # Tree Initialization
    root_node = TreeNode(1)
    n2 = TreeNode(2)
    n3 = TreeNode(3)
    n4 = TreeNode(4)
    n5 = TreeNode(5)
    n6 = TreeNode(6)
    n7 = TreeNode(7)
    n8 = TreeNode(8)
    n9 = TreeNode(9)

    n8.addLeft(n9)
    n5.addLeft(n7)
    n5.addRight(n8)
    n3.addLeft(n5)
    n4.addRight(n6)
    n2.addLeft(n4)
    root_node.addLeft(n2)
    root_node.addRight(n3)

    levelLinkedLists = list()
    levelOrderTraverse(root_node, levelLinkedLists, 0)

    i = 0
    for ll in levelLinkedLists:
        print("Level - ", i, end=" | ")
        while ll is not None: