utils

 1class TreeNode:
 2    def __init__(self, val=0, left=None, right=None):
 3        self.val = val
 4        self.left = left
 5        self.right = right
 6
 7    def __eq__(self, other) -> bool:
 8        return (
 9            self.val == other.val
10            and self.left == other.left
11            and self.right == other.right
12        )
13
14
15class ListNode:
16    def __init__(self, val=0, next=None):
17        self.val = val
18        self.next = next
19
20
21def to_binary_tree(items):
22    if not items:
23        return None
24
25    it = iter(items)
26    root = TreeNode(next(it))
27    q = [root]
28    for node in q:
29        val = next(it, None)
30        if val is not None:
31            node.left = TreeNode(val)
32            q.append(node.left)
33        val = next(it, None)
34        if val is not None:
35            node.right = TreeNode(val)
36            q.append(node.right)
37    return root
38
39
40def to_bst(items):
41    items.sort()
42
43    def sorted_list_to_bst(items):
44        if not items:
45            return None
46        mid = len(items) // 2
47        root = TreeNode(items[mid])
48        root.left = sorted_list_to_bst(items[:mid])
49        root.right = sorted_list_to_bst(items[mid + 1 :])
50        return root
51
52    return sorted_list_to_bst(items)
class TreeNode:
 2class TreeNode:
 3    def __init__(self, val=0, left=None, right=None):
 4        self.val = val
 5        self.left = left
 6        self.right = right
 7
 8    def __eq__(self, other) -> bool:
 9        return (
10            self.val == other.val
11            and self.left == other.left
12            and self.right == other.right
13        )
TreeNode(val=0, left=None, right=None)
3    def __init__(self, val=0, left=None, right=None):
4        self.val = val
5        self.left = left
6        self.right = right
val
left
right
class ListNode:
16class ListNode:
17    def __init__(self, val=0, next=None):
18        self.val = val
19        self.next = next
ListNode(val=0, next=None)
17    def __init__(self, val=0, next=None):
18        self.val = val
19        self.next = next
val
next
def to_binary_tree(items):
22def to_binary_tree(items):
23    if not items:
24        return None
25
26    it = iter(items)
27    root = TreeNode(next(it))
28    q = [root]
29    for node in q:
30        val = next(it, None)
31        if val is not None:
32            node.left = TreeNode(val)
33            q.append(node.left)
34        val = next(it, None)
35        if val is not None:
36            node.right = TreeNode(val)
37            q.append(node.right)
38    return root
def to_bst(items):
41def to_bst(items):
42    items.sort()
43
44    def sorted_list_to_bst(items):
45        if not items:
46            return None
47        mid = len(items) // 2
48        root = TreeNode(items[mid])
49        root.left = sorted_list_to_bst(items[:mid])
50        root.right = sorted_list_to_bst(items[mid + 1 :])
51        return root
52
53    return sorted_list_to_bst(items)