《编程之美》:求二叉树中节点的最大距离

看到这题,第一时间就联想到了求二叉树深度(通过分别求左右子树的深度,然后合并(取最大值加1)从而得到了根节点的深度(其实就是分治思想))

代码如下:

int Depth(Node *p)
{
int l_d , r_d;

if(p == NULL)
{
return 0;
}
l_d
= Depth(p->lChild);
r_d
= Depth(p->rChild);

return Max(l_d , r_d) + 1;
}

 

而现在我们要求节点的最大距离,我们可以用同样的方法去思考:对一个节点A,其子树中节点的最大距离一定是A左子树的深度 + A右子树的深度,所以我们只要用“分治”的思想递归求解即可,并且用一个MaxLen来维护最大值:

int MaxLen = 0;

int FindMaxLen(Node *p)
{
int l_Len , r_Len;

if(p == NULL)
{
return 0;
}
l_Len
= FindMaxLen(p->lChild);
r_Len
= FindMaxLen(p->rChild);
MaxLen
= Max(l_Len + r_Len , MaxLen);

return Max(l_Len , r_Len) + 1;
}

个人感觉比书上的简洁很多~

 

 

posted on 2010-06-22 13:11  DiaoCow  阅读(363)  评论(0编辑  收藏  举报

导航