algorithm - 在计算树的直径时,为什么仅计算高度是不够的

标签 algorithm recursion tree binary-tree

在计算树的直径时,我们会考虑以下各项中的最大值:

1:左子树的直径

2:右子树的直径

3:左子树的高度+右子树的高度+1。

为什么这三个是必要的?为什么 3. 单独是不够的。让我们以 3 节点树和 2 节点树为例。在前第三点中,仅给出 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之间路径上的节点是E,C, B, D, F.

作为the page you linked to解释说,条件 3 仅适用于通过树根的路径。如果两片叶子之间的最长路径不通过根,则它属于条件 1 或 2。该页面上的第一个图甚至显示了一个示例:

tree diagram

右树的直径为 9,但条件 3 只给出 5 + 2 + 1 = 8。

关于algorithm - 在计算树的直径时,为什么仅计算高度是不够的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42472658/

相关文章:

c - 遍历 n-Ary 树 Level Order

c - 从一组映射到另一组

c++ - 如何找到字符串的所有排列?

java - Scala:如何在有向图中查找并返回循环路径

Java-instanceof 的替代品?

java - 如何在java非递归中搜索一般树中的节点

java - JVM 中这些时序问题的原因是什么?

c++ - 按升序递归输出二叉树

python - 如何在Python中编写一个递归生成向量的函数?

ruby - 算法/递归树挑战