二叉树经典面试题之一:求二叉树中最远的两个节点的距离
解题思路:
既然求二叉树中最远的两个节点的距离,那么我们首先画一个普通的二叉树来分析:
由上述图可得到两个最远的节点为3和5,而距离为这两个节点的最近公共祖父的左右高度和。
现在我需要考虑一个特殊的二叉树来验证我的结论是否正确:
由上述图可得到两个最远的节点为4和6,而距离为这两个节点的最近公共祖父的左右高度和。
依据上述结论,可编写出解题的代码,完整的源代码及测试用例如下:
size_t MaxPath(BinaryTreeNode<int>* root, size_t& max_path)
{
if(root == NULL)
{
return NULL;
}
size_t left = MaxPath(root->_left, max_path);
size_t right = MaxPath(root->_right, max_path);
if(left + right > max_path)
{
max_path = left + right;
}
return left > right ? left + 1: right + 1;
}
void TestMaxPath()
{
int array[] = {1,2,3,'#','#',4};
int len = sizeof(array)/sizeof(array[0]);
BinaryTree<int> t(array, len, '#');
size_t max_path = 0;
cout<<MaxPath(t._root, max_path)<<endl;
}