求一个二叉树中任意两个节点间的最大距离,
两个节点的距离的定义是这两个节点间边的个数,
比如某个孩子节点和父节点间的距离是1,和相邻兄弟节点间的距离是2,优化时间空间复杂度。
struct Node
{
int value;
Node *left;
Node *right;
int maxLeft;
int maxRight;
};
int MaxDistance(Node *root)
{
if(root == NULL) return 0;
if(root->left==NULL)
{
root->maxLeft = 0;
}
else
{
int temp = root->left->maxLeft > root->left->maxRight?root->left->maxLeft:root->left->maxRight;
root->maxLeft = temp+1;
MaxDistance(root->left);
}
if(root->right == NULL)
{
root->maxRight = 0;
}
else
{
int temp = root->right->maxLeft > root->left->maxRight?root->right->maxLeft:root->left->maxRight;
root->maxRight =temp+1;
MaxDistance(root->right);
}
int max_len = root->maxLeft +root->maxRight;
}