It's not easy to explain, particularly when I can't see you eyes, and when they start to glaze over...
So I won't try.
Instead, let's talk about what recursion
is.
Recursion is the process of using the same code to work out the various parts of a calculation, and is often demonstrated with factorials:
n! = n * (n - 1)! where n > 0
Which means that while n is greater than zero (so it has a valid terminator to stop execution) you can calculate a factorial by multiplying the number by the factorial of the number less one:
5! = 5 * (5-1) * (5 - 1 - 1) * (5 - 1 - 1 - 1) * (5 - 1 - 1 - 1 - 1)
Your code works in the same way: it works out the depth of each side by using it's own code on each side, then at each stage it returns the largest (plus one to count that level).
So if a node has no sub-nodes, it will return 1 (because the test at the top of the function returns 0 as the depth of non-existent nodes).
That probably doesn't mean much, so draw on paper a "map" of your node structure like this:
A
/ \
B C
/ \
D E
\
F
And then either "walk it through" manually, or use the debugger to run it step by step, looking at the map at the same time.
At some point the "BING!" moment should happen and it'll make sense!