求二叉树中最远的两个节点的距离
2017年07月22日 18:40:03 阅读数:562更多
个人分类: 数据结构
所属专栏: 面试知识点
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/poison_biti/article/details/75798001
求两个节点之间最远的距离:
(1)两个节点都是叶子结点
(2)一个是叶子结点一个是根节点
思路:
(1)如果具有最远距离的两个节点经过了根节点,那么最远的距离就是左边最深的深度加上右边最深的深度之和。
(2)如果具有最远距离的两个节点之间的路径不经过根节点,那么最远的距离就在根节点的其中一个子树上的两个叶子结点。
int GetFarDistance()
{
int distance = -1;
_Height(_root,distance);
return distance;
}
protected:
int _Height(Node* root, int& distance)
{
if (root == NULL)
{
return 0;
}
int leftH = _Height(root->_left);
int rightH = _Height(root->_right);
if (leftH+rightH > distance)
{
distance = leftH + rightH;
}
return leftH > rightH ? leftH+1 : rightH+1;
}