     }
 
     public mutating func merge(tree: RedBlackTree<Config, Payload>) {
-        if tree.count > self.count {
-            let copy = self
-            self = tree
-            self.merge(copy)
-            return
-        }
+        self.reserveCapacity(self.count + tree.count)
         var handle = tree.leftmost
         var summary = Summary()
         while let h = handle {

        let sc = sb + self[b1].head
        precondition(ordered((self, b1, sb), before: (tree, c2, sc)))

        var summary = sc
        var previous1 = b1
        var next2: Handle? = c2

        var summary = summaryOfLeftSubtree(handle)
        while case .Toward(let direction, under: let parent) = slotOf(handle) {
            if direction == .Right {
                summary = summaryOfLeftSubtree(parent) + self[parent].head + summary
            }
            handle = parent
        }
