您的位置:首页 > 职场人生

~求二叉树中最远的两个节点的距离~

2017-05-03 19:42 239 查看
 二叉树经典面试题之一:求二叉树中最远的两个节点的距离

 

 解题思路:

既然求二叉树中最远的两个节点的距离,那么我们首先画一个普通的二叉树来分析:



[align=left] [/align]

由上述图可得到两个最远的节点为3和5,而距离为这两个节点的最近公共祖父的左右高度和。

 

现在我需要考虑一个特殊的二叉树来验证我的结论是否正确:

 



[align=left] [/align]

由上述图可得到两个最远的节点为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;
}


 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐