|
1 | 1 | #!/usr/bin/env python3 |
2 | 2 |
|
3 | | - |
4 | 3 | from __future__ import annotations |
5 | 4 |
|
6 | 5 | from collections.abc import Iterable, Iterator |
@@ -62,37 +61,35 @@ def value(self) -> T: |
62 | 61 | """ |
63 | 62 | return self._value |
64 | 63 |
|
| 64 | + @staticmethod |
| 65 | + def merge(root1: SkewNode[T] | None, root2: SkewNode[T] | None) -> SkewNode[T] | None: |
| 66 | + """ |
| 67 | + Merge 2 nodes together. |
| 68 | + >>> SkewNode.merge(SkewNode(10),SkewNode(-10.5)).value |
| 69 | + -10.5 |
| 70 | + >>> SkewNode.merge(SkewNode(10),SkewNode(10.5)).value |
| 71 | + 10 |
| 72 | + >>> SkewNode.merge(SkewNode(10),SkewNode(10)).value |
| 73 | + 10 |
| 74 | + >>> SkewNode.merge(SkewNode(-100),SkewNode(-10.5)).value |
| 75 | + -100 |
| 76 | + """ |
| 77 | + if not root1: |
| 78 | + return root2 |
65 | 79 |
|
66 | | -@staticmethod |
67 | | -def merge(root1: SkewNode[T] | None, root2: SkewNode[T] | None) -> SkewNode[T] | None: |
68 | | - """ |
69 | | - Merge 2 nodes together. |
70 | | - >>> SkewNode.merge(SkewNode(10),SkewNode(-10.5)).value |
71 | | - -10.5 |
72 | | - >>> SkewNode.merge(SkewNode(10),SkewNode(10.5)).value |
73 | | - 10 |
74 | | - >>> SkewNode.merge(SkewNode(10),SkewNode(10)).value |
75 | | - 10 |
76 | | - >>> SkewNode.merge(SkewNode(-100),SkewNode(-10.5)).value |
77 | | - -100 |
78 | | - """ |
79 | | - if not root1: |
80 | | - return root2 |
81 | | - |
82 | | - if not root2: |
83 | | - return root1 |
84 | | - |
85 | | - # Use explicit __lt__ method for type safety |
86 | | - if root1.value > root2.value: |
87 | | - root1, root2 = root2, root1 |
| 80 | + if not root2: |
| 81 | + return root1 |
88 | 82 |
|
89 | | - result = root1 |
90 | | - temp = root1.right |
91 | | - result.right = root1.left |
92 | | - result.left = SkewNode.merge(temp, root2) |
| 83 | + # Use explicit __lt__ method for type safety |
| 84 | + if root1.value > root2.value: |
| 85 | + root1, root2 = root2, root1 |
93 | 86 |
|
94 | | - return result |
| 87 | + result = root1 |
| 88 | + temp = root1.right |
| 89 | + result.right = root1.left |
| 90 | + result.left = SkewNode.merge(temp, root2) |
95 | 91 |
|
| 92 | + return result |
96 | 93 |
|
97 | 94 | class SkewHeap[T]: |
98 | 95 | """ |
|
0 commit comments