二叉树递归求深度遇到的逻辑问题

在求二叉树深度的时候写的代码是这样的


if (!T)
    {
        return 0;
    }
    else
    {
        int m=BiTreeDepth(T->lchild);
        int n=BiTreeDepth(T->rchild);
         }#区别再这个括号的位置
    if (m>n)
    {
        return m+1;
    }
    else
    {
        return n+1;
    }

运行结果是错的

而我改正之后的代码是

if (!T)
    {
        return 0;
    }
    else
    {
        int m=BiTreeDepth(T->lchild);
        int n=BiTreeDepth(T->rchild);

    if (m>n)
    {
        return m+1;
    }
    else
    {
        return n+1;
    }
    }#区别再这个括号的位置

这个时候运行结果就是正确的
想请问后面的if代码放在上一个else里面和不放在里面的区别是什么

上面错误是因为返回的结果不是递归结束后的值,
下面的代码已经把返回控制在else语句块内部了,属于后根遍历。

后面代码使用的m和n是紧接前面int m和int n的m和n
前面代码使用的m和n根本不是紧接前面int m和int n的m和n