当前位置: 首页 > 知识库问答 >
问题:

当计算一棵树的直径时,为什么仅仅计算高度是不够的

蔚弘量
2023-03-14

在求树的直径时,我们考虑以下最大值:

1:左子树的直径

2:右子树的直径

3:左子树高度右子树高度1.

为什么这三个是必要的?为什么是3。光靠自己是不够的。让我们看一个简单的3节点树和2节点树的例子。在前一个例子中,仅第3点就给出了1=3。而在后一种情况下,仅第3点就给出0 1=2。

在这种情况下,为什么我们需要找到三的最大值。请解释

共有1个答案

公冶子琪
2023-03-14

考虑以下树:

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

A的左子树的高度为3;A的右子树的高度为0。因此条件3给了我们3 0 1 = 4。

但是树的直径是5:EF之间路径上的节点是ECBDF

正如您链接到的页面所解释的,条件3仅适用于通过树的根的路径。如果两片叶子之间的最长路径没有穿过根部,则属于条件1或2。该页面上的第一个图表甚至显示了一个示例:

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

 类似资料:
  • 我需要关于计算二叉树高度的理论的帮助,通常是符号。 我看过以下文章: 计算二叉树的高度 其中一个帖子给出了以下符号: 高度(节点)=最大值(高度(节点L)、高度(节点R))1 假设我有以下二叉树: 因此,我是否计算左节点(8)和右节点(42)的最大值,然后加上1?我不太明白这种符号是如何计算树的高度的。

  • 我有一些意想不到的行为,我不明白。我正在尝试实现一个固定的可变时间步长,如中所述http://gafferongames.com/game-physics/fix-your-timestep/ 和http://gameprogrammingpatterns.com/game-loop.html. 当我在VisualStudio中运行程序时,我的内部while循环从来不会计算为true;但是,当我取

  • 我已经验证了avl插入代码的三个来源。在计算高度的所有情况下, 根高度=1最大值(self.getHeight(root.left),self。getHeight(根(右)) 上面给出了一行。 这是我的问题,为什么我们要取左子树和右子树的最大值,并在其中添加一个?如果我们将节点添加到具有最小高度的子树中呢?在这种情况下,两者将具有相同的高度H而不是H 1。 此高度增量应添加为, 我说得对吗?如果是

  • 问题内容: 去吧,Dijkstra:打印出路径,而不仅仅是计算最短的距离。 http://play.golang.org/p/A2jnzKcbWD 我使用Dijkstra算法能够找到最短的距离,也许不是。可以在这里找到代码。 但是,如果我无法打印出路径,那将毫无用处。随着大量指针的出现,我无法弄清楚如何打印出权重最少的最终路径。 简而言之,我不仅要找到最短的距离,还要在给定的代码上打印出最短的路径

  • 问题内容: 有没有一种方法可以计算出地面与手机之间的高度?我以为我可以用它来测量身高,但这篇文章建议您不要考虑误差率。如果是这样,我应该采取什么方法来测量手机的高度? 问题答案: GPS的精度足以使您将海拔高度提高到几米之内,但这可能并不是您想要的。 我想您可以在确定手机的麦克风/扬声器正好用加速度计指向地面的情况下尝试使用某种声纳。您可以假设使用STP,这可能会导致大约20%的错误。 您还可以告

  • 我这样问是因为我知道检查列表是否为空的python方法如下: 将打印,等等。因此,这导致我用真值识别;但是,如果我试图“直接”比较[]和False,我会得到以下结果: 等 这到底是怎么回事?我觉得我错过了一些非常明显的东西。