Merge 2 nodes together. >>> rhn1 = RandomizedHeapNode(10) >>> rhn2 = RandomizedHeapNode(20) >>> RandomizedHeapNode.merge(rhn1, rhn2).value 10 >>> rhn1 = RandomizedHeapNode(20) >>> rhn2 = RandomizedHeapNode(10) >>> RandomizedHeapNode.
(
root1: RandomizedHeapNode[T] | None, root2: RandomizedHeapNode[T] | None
)
| 36 | |
| 37 | @staticmethod |
| 38 | def merge( |
| 39 | root1: RandomizedHeapNode[T] | None, root2: RandomizedHeapNode[T] | None |
| 40 | ) -> RandomizedHeapNode[T] | None: |
| 41 | """ |
| 42 | Merge 2 nodes together. |
| 43 | |
| 44 | >>> rhn1 = RandomizedHeapNode(10) |
| 45 | >>> rhn2 = RandomizedHeapNode(20) |
| 46 | >>> RandomizedHeapNode.merge(rhn1, rhn2).value |
| 47 | 10 |
| 48 | |
| 49 | >>> rhn1 = RandomizedHeapNode(20) |
| 50 | >>> rhn2 = RandomizedHeapNode(10) |
| 51 | >>> RandomizedHeapNode.merge(rhn1, rhn2).value |
| 52 | 10 |
| 53 | |
| 54 | >>> rhn1 = RandomizedHeapNode(5) |
| 55 | >>> rhn2 = RandomizedHeapNode(0) |
| 56 | >>> RandomizedHeapNode.merge(rhn1, rhn2).value |
| 57 | 0 |
| 58 | """ |
| 59 | if not root1: |
| 60 | return root2 |
| 61 | |
| 62 | if not root2: |
| 63 | return root1 |
| 64 | |
| 65 | if root1.value > root2.value: |
| 66 | root1, root2 = root2, root1 |
| 67 | |
| 68 | if random.choice([True, False]): |
| 69 | root1.left, root1.right = root1.right, root1.left |
| 70 | |
| 71 | root1.left = RandomizedHeapNode.merge(root1.left, root2) |
| 72 | |
| 73 | return root1 |
| 74 | |
| 75 | |
| 76 | class RandomizedHeap[T: bool]: |