The recursive approach works from the bottom up. At each node, ask questions:
Is this node p or q? If yes, return it.
Does my left subtree contain p or q? Recurse left.
Does my right subtree contain p or q? Recurse right.
If both left and right return non-null, the current node is the LCA. Both targets are in different subtrees, so this is the deepest point where their paths meet.
If only one side returns non-null, pass that result up. It means both p and q are in the same subtree.