【100题】第十一题(二叉树中节点的最大距离)

一,题目:

       如果把二叉树看成一个图,父子节点之间的连线看成是双向的(无向图),定义"距离"为两节点之间边的个数。写一个程序,求一棵二叉树中相距最远的两个节点之间的距离。

二,思路

       误导思路:不要以为求树的高度。

       正确思路:求“图”中任意两个节点之间,相距最远的的两个节点之间的距离。

       求解步骤:A,经过根节点,左边最深的点到右边最深的点的距离。

                          B,不经过根节点,而是左子树或右子树中最大距离,取其大者。

三,图解

情况A:                                                   情况B:

                            A                                                                A

                        /       \                                                         /        \

                      B        C                                                    B            O

                    /    \     /    \                                                /     \

                 D     E   F     G                                          C         D

                                                                                                                                    /             \

                                                                               E                F

                                                                             /                      \

                                                                         G                           H 

情况A:最大距离经过顶点D-B-A-C-F(其中之一)

情况B:最大距离不经过顶点G-E-C-B-D-F-H(其中之一)

 

四,源码


 

posted @ 2011-12-25 00:41  Java EE  阅读(524)  评论(0编辑  收藏  举报