一道面试题:
求一棵树中任意两个结点的最远距离。
思想:
利用递归,在求深度的同时顺带把最远距离算出来。
思路如下:
struct node
{
vector<node*> child;
vector<int> distance;
}
int MaxDepth(node * root, int *MaxSum)
{
if (root == NULL)
return 0;
vector<int> temp(root->child.size(),0);
for(int i=0;i<root->child.size();i++)
{
if(root->child[i]!=NULL)
{
temp[i] = MaxDepth(root->child[i], MaxSum) + root->value[i];
}
}
sort(temp);//从大到小
int sum = tem[0] + temp[1];
*MaxSum = (*MaxSum > sum)?*MaxSum:sum;
return temp[0];
}