编程之美-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,求二叉树中节点的最大距离

posted @ 2011-09-10 11:55  xiaodongrush  阅读(346)  评论(0编辑  收藏  举报