【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(其中之一)
四,源码