在找到树的直径时,我们要看下面的最大值:
1:左子树直径
2:右子树直径
3:左子树高+右子树高+1。
为什么这三个是必要的?为什么是3光靠自己是不够的。让我们来看看3节点树和2节点树的简单示例。在前面的第3点中,仅给出1+1+1=3。
而在后一种情况下,仅第3点给出0+1+1=2。
在这种情况下,为什么我们需要找到最多三个请解释一下

最佳答案

考虑以下树:

         [A]
        /
      [B]
     /   \
  [C]     [D]
  /         \
[E]         [F]

A的左子树高度为3,A的右子树高度为0因此条件3给我们3+0+1=4。
但是树的直径是5:路径上EF之间的节点分别是ECBDF、。
正如the page you linked to所解释的,条件3仅适用于通过树根的路径。如果两片叶子之间的最长路径没有穿过根部,则属于条件1或2该页上的第一个图表甚至显示了一个示例:
algorithm - 在计算树的直径时,为什么仅计算高度还不够-LMLPHP
右树的直径为9,但条件3只给出5+2+1=8。

10-07 19:04