~求二叉树中最远的两个节点的距离~
2017-05-03 19:42
239 查看
二叉树经典面试题之一:求二叉树中最远的两个节点的距离
解题思路:
既然求二叉树中最远的两个节点的距离,那么我们首先画一个普通的二叉树来分析:
[align=left] [/align]
由上述图可得到两个最远的节点为3和5,而距离为这两个节点的最近公共祖父的左右高度和。
现在我需要考虑一个特殊的二叉树来验证我的结论是否正确:
[align=left] [/align]
由上述图可得到两个最远的节点为4和6,而距离为这两个节点的最近公共祖父的左右高度和。
依据上述结论,可编写出解题的代码,完整的源代码及测试用例如下:
解题思路:
既然求二叉树中最远的两个节点的距离,那么我们首先画一个普通的二叉树来分析:
[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; }
相关文章推荐
- ODOA(2) 求二叉树中两个节点的最大距离(C语言实现)
- 二叉树中任意两个节点之间的最大距离
- 求一个二叉树中距离最远的两个节点
- 求二叉树中最远的两个节点的距离
- 查找二叉树最远两个节点的距离
- 二叉树中相距最远的两个节点之间的距离
- 二叉树系列---求二叉树中两个节点之间的最大距离
- 求一个二叉树中任意两个节点间的最大距离
- 求二叉树中距离最远的两个叶子节点的距离
- 求一个二叉树中任意两个节点间的最大距离
- 求二叉树中距离最远的两个叶子节点间的距离?
- 求一个二叉树中任意两个节点间的最大距离,两个节点的距离的定义是这两个节点间边的个数,比如某个孩子节点和父节点间的距离是1,和相邻兄弟节点间的距离是2,
- 求二叉树中两个节点的最大距离
- 二叉树中相距最远的两个节点之间的距离
- 二叉树中最远两个节点的距离
- 【100题】第三十九题 二叉树任意两个节点间最大距离和有向图割点
- 微软等数据结构+算法面试100题(38)-- 二叉树中任意两个节点间的最大距离
- 二叉树系列——二叉树的最大距离(即相距最远的两个叶子节点,编程之美,百度面试题)
- 二叉树中任意两个节点间的最大距离
- 每天学习一算法系列(34)(求一个二叉树中任意两个节点间的最大距离,两个节点的距离的定义是这两个节点间边的个数)