编程之美-3.8-求二叉树种节点的最大距离
1. 简述
如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义“距离”为两个节点之间边的个数。写一个程序求一棵二叉树中相距最远的两个节点之间的距离。
2. 思路
这道题是寻找最大一个距离,还是相对容易的,递归是比较好像到的。对于每个子树来说,要么最大距离在根的左子树中,要么在根的右子树中,要么是通过根的情况。
Height(NULL) = 0, Height(node) = Max{Height(node->left)+1,Height(node->right)+1}。
Max(NULL) = 0; Max(node) = Max{Max(node->left), Max(node->right), Height(node->left)+Height(node->right)},
最终Max(root)即为所求。
对于非递归方法,这道题应该是后序的方法,具体可以参见前序-中序-后序-非递归-实现中的实现。在每次访问节点的时候,加入计算Height和Max的代码即可。
3. 参考
编程之美,3.8,求二叉树中节点的最大距离