问题描述:
给出一棵二叉树,求二叉树上最远的两个节点的距离
分析:
最长距离即两个节点间经过的路径最长,可以把问题分解为每个节点的左子树的最大深度与右子树的最大深度之和的最大值,保留这个最大值并对比各节点的最大值即可得出
//递归算法如下:
int max=0;
int depth(Node *root)
{
if(root->left==null && root->right==null)
{
return 0;
}
int depleft=0;
int depright=0;
if(root->left!=null)
{
depleft=depth(root->left)+1; //左子树的最大深度
}
if(root->right!=null)
{
dep right =depth(root->right)+1; //右子树最大深度
}
if((depleft+depright)>max)
max=depleft+depright; //更新当前最大值
return depleft>depright?depleft:depright;
}