Here's a Python solution:

```
class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

def mergeTrees(root1, root2):
    if not root1:
        return root2
    if not root2:
        return root1
    
    root1.val += root2.val
    root1.left = mergeTrees(root1.left, root2.left)
    root1.right = mergeTrees(root1.right, root2.right)
    
    return root1
```

Here's how the solution works:

- We define a class `TreeNode` with a constructor that initializes a node's value, left child, and right child.
- We define a function `mergeTrees` that takes in two binary trees `root1` and `root2` as parameters.
- If `root1` is `None`, we return `root2`. If `root2` is `None`, we return `root1`. This is because if either tree is empty, we want to return the non-empty tree as the merged tree.
- We add the values of `root1` and `root2` together and update the value of `root1`. This will account for any overlap in nodes.
- We recursively call `mergeTrees` on the left and right children of `root1` and `root2`.
- Finally, we return `root1`, which is the merged tree.
Scrivi una soluzione per il seguente problema in Python: ti vengono dati due alberi binari root1 e root2. Immagina che quando ne metti uno a coprire l'altro, alcuni nodi dei due alberi si sovrappongano mentre gli altri no. Devi unire i due alberi in un nuovo albero binario. La regola di unione prevede che se due nodi si sovrappongono, somma i valori dei nodi come nuovo valore del nodo unito. In caso contrario, il nodo NOT nullo verrà utilizzato come nodo del nuovo albero. Restituisce l'albero unito. Nota: il processo di unione deve iniziare dai nodi radice di entrambi gli alberi.