Merge 2 nodes together. >>> SkewNode.merge(SkewNode(10),SkewNode(-10.5)).value -10.5 >>> SkewNode.merge(SkewNode(10),SkewNode(10.5)).value 10 >>> SkewNode.merge(SkewNode(10),SkewNode(10)).value 10 >>> SkewNode.merge(SkewNode(-100),Skew
(
root1: SkewNode[T] | None, root2: SkewNode[T] | None
)
| 57 | |
| 58 | @staticmethod |
| 59 | def merge( |
| 60 | root1: SkewNode[T] | None, root2: SkewNode[T] | None |
| 61 | ) -> SkewNode[T] | None: |
| 62 | """ |
| 63 | Merge 2 nodes together. |
| 64 | >>> SkewNode.merge(SkewNode(10),SkewNode(-10.5)).value |
| 65 | -10.5 |
| 66 | >>> SkewNode.merge(SkewNode(10),SkewNode(10.5)).value |
| 67 | 10 |
| 68 | >>> SkewNode.merge(SkewNode(10),SkewNode(10)).value |
| 69 | 10 |
| 70 | >>> SkewNode.merge(SkewNode(-100),SkewNode(-10.5)).value |
| 71 | -100 |
| 72 | """ |
| 73 | if not root1: |
| 74 | return root2 |
| 75 | |
| 76 | if not root2: |
| 77 | return root1 |
| 78 | |
| 79 | if root1.value > root2.value: |
| 80 | root1, root2 = root2, root1 |
| 81 | |
| 82 | result = root1 |
| 83 | temp = root1.right |
| 84 | result.right = root1.left |
| 85 | result.left = SkewNode.merge(temp, root2) |
| 86 | |
| 87 | return result |
| 88 | |
| 89 | |
| 90 | class SkewHeap[T: bool]: |