Given the roots of two binary trees `p` and `q`, write a function to check if they are the same or not. Two binary trees are considered the same if they are structurally identical, and the nodes have the same value.
Recursive Comparison
To compare two trees, we can use a recursive Depth-First Search (DFS). At each step, we check: (1) if both nodes are null (same), (2) if only one is null (different), or (3) if their values are different. If all these checks pass, we recursivly compare their left and right children.