一,题目:

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

二,思路

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

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

       求解步骤: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(其中之一)

 

四,源码


 

相关文章:

  • 2021-05-24
  • 2022-12-23
  • 2022-01-05
  • 2021-10-22
  • 2022-12-23
  • 2021-10-18
猜你喜欢
  • 2021-09-04
  • 2021-05-15
相关资源
相似解决方案