Here is the solution:
function isSameTree(p, q):
if p is null and q is null:
return true
if p is null or q is null:
return false
if p.val != q.val:
return false
return isSameTree(p.left, q.left) and isSameTree(p.right, q.right)
The recursion handles both trees at once. Each call processes one node from each tree. The base cases catch mismatches early. The final line ties together the recursive calls.
This runs in time and uses space.