以下代码如何工作?找到树的深度?

时间:2012-08-01 10:40:53

标签: c

请解释以下代码的工作原理?我无法得到递归。

int depth(struct tree *q)
{ 
    int h1,h2;
    if(q==NULL)
       return 0;
    else
    {
       h1=depth(q->left);
       h2=depth(q->right);
    }
    return (max(h1,h2) +1 );
}

递归如何在上面的代码中工作? h1和h2如何获得价值?

1 个答案:

答案 0 :(得分:4)

想象一下只有3个节点的简单树,1个根和2个孩子

      Node R
     /      \
    /        \
Node A      Node B

对深度的第一次调用将Node R作为其参数。

调用1)q不是NULL所以为节点R调用depth() ==节点A

致电2)q不是NULL因此,为节点A调用depth() == NULL

致电3)qNULL,所以返回0;

调用2)h1 = 0;现在调用节点A right = NULL

致电4)qNULL,因此返回0;

致电2)h1 = 0; h2 = 0; return max(0, 0) + 1

呼叫1)h1 = 1;现在呼叫节点R右=节点B

调用5)q不是NULL所以为节点B调用depth() == NULL

致电6)qNULL,因此返回0;

调用5)h1 = 0;现在调用Node B right = NULL

致电7)qNULL,因此返回0;

致电5)h1 = 0; h2 = 0; return max(0, 0) + 1;

致电1)h1 = 1; h2 = 1; return max(1, 1) + 1;

返回2.