请解释以下代码的工作原理?我无法得到递归。
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如何获得价值?
答案 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)q
为NULL
,所以返回0;
调用2)h1 = 0;
现在调用节点A right = NULL
致电4)q
为NULL
,因此返回0;
致电2)h1 = 0; h2 = 0; return max(0, 0) + 1
呼叫1)h1 = 1;
现在呼叫节点R右=节点B
调用5)q
不是NULL
所以为节点B调用depth()
== NULL
致电6)q
为NULL
,因此返回0;
调用5)h1 = 0;
现在调用Node B right = NULL
致电7)q
为NULL
,因此返回0;
致电5)h1 = 0; h2 = 0; return max(0, 0) + 1;
致电1)h1 = 1; h2 = 1; return max(1, 1) + 1;
返回2.