| 12 | |
| 13 | @dataclass |
| 14 | class Node: |
| 15 | val: int |
| 16 | left: Node | None = None |
| 17 | right: Node | None = None |
| 18 | |
| 19 | def __iter__(self) -> Iterator[int]: |
| 20 | if self.left: |
| 21 | yield from self.left |
| 22 | yield self.val |
| 23 | if self.right: |
| 24 | yield from self.right |
| 25 | |
| 26 | def __len__(self) -> int: |
| 27 | return sum(1 for _ in self) |
| 28 | |
| 29 | def insert(self, val: int) -> None: |
| 30 | if val < self.val: |
| 31 | if self.left is None: |
| 32 | self.left = Node(val) |
| 33 | else: |
| 34 | self.left.insert(val) |
| 35 | elif val > self.val: |
| 36 | if self.right is None: |
| 37 | self.right = Node(val) |
| 38 | else: |
| 39 | self.right.insert(val) |
| 40 | |
| 41 | |
| 42 | def tree_sort(arr: list[int]) -> tuple[int, ...]: |