【问题标题】:What is the diameter of a tree that doesn't have at least two leaves?没有至少两片叶子的树的直径是多少?
【发布时间】:2021-03-29 05:29:02
【问题描述】:

一棵树 T 的直径是下列量中最大的一个:

  1. T 的左子树的直径
  2. T 的右子树的直径
  3. 叶子之间穿过 T 根的最长路径(这可以 从 T 的子树的高度计算)

来源:https://www2.cs.duke.edu/courses/spring00/cps100/assign/trees/diameter.html

但是,它没有说明没有至少两片叶子的树的直径是多少,比如只有根的树,或者 1 -> 2?是 0、未定义、无穷大还是负无穷大?

【问题讨论】:

  • 据我所知,只有根树应该是 0,1->2 应该是 1
  • @AbhinavMathur 你能引用一个来源吗?你所说的不能来自我发布的定义。
  • 我没有正式的出处,只是使用定义的第3点
  • 最长的简单路径(对于树可以假设它是简单路径)是一个介于 0 和 n-1 之间的数字,给定具有 n 个节点的树或图。因此,根据您给出的描述,具有一个或两个节点的树显然在叶子之间的最长路径为 0。源不是必需的,它在上述定义中是正确的。

标签: algorithm data-structures binary-tree


【解决方案1】:

直径的更好定义是“最长路径的长度”。仅根树的直径为 0,两个顶点上的路径的直径为 1。给出的规则“不必要地”复杂,但那是因为它们也提供了一种计算直径的方法。另外,请注意,从图论的意义上说,如果根除了一个子节点之外,它没有全部或全部,它叶子本身,所以你可以看到第三个子句实际上覆盖了问题案例。

【讨论】:

  • 根缺少一个孩子在任何定义上都不是叶子。
  • @AbhijitSarkar Except it is。在图论中,这是直径概念的来源,树不是用“特权”根构造的。任何只有一个链接到树的其余部分的节点都是叶子。这与计算机科学中的惯例有点不同,因为我们使用树的方式不同。
  • 我看到“一片叶子是一个没有孩子的顶点”不能证实你的说法,“只有一个顶点的树(因此根和叶)的深度和高度都为零”。缺少一个孩子的根仍然有另一个子树,因此根据上述任何定义都不是叶子。如果该页面上还有其他内容,请引用而不是发布一般链接。
  • @AbhijitSarkar 我将链接设置为自动滚动到相关句子,但您的浏览器可能不支持该功能。我将引用它“类似地,外部顶点(或外部顶点、终端顶点或叶)是度数为 1 的顶点。”该定义还应包括度数为 0 的顶点,但这是仅适用于一棵树的特殊情况。另外,你有点没抓住重点。问题中的定义不好,您可以通过将“叶子”的含义从CS版本延伸到图论版本来使其工作,基本的东西是“直径=最长路径的长度”。
  • @AbhijitSarkar 如果根只有一个孩子,如果边是无向的,它也可以被认为是叶子。
【解决方案2】:

根据给定的定义,对于树中有一个节点或两个节点的两种情况,它都必须为 0。对于 n 节点树,路径的长度为 0 到 n-1。无穷大或负无穷大以及未定义的直径没有逻辑意义,第三个定义总是给出数字答案。也许需要一个更好的定义,但它确实取决于为什么要首先定义直径。显然这是一个递归定义,所以无论如何它都需要一个基本案例。左或右子树最终将是 1 或 2 节点树。但从逻辑上讲,在那里构造的定义似乎不精确,并且不是特别有用,除了具有奇数个节点且其节点仅包含两个叶子的适当平衡二叉树。

一般二叉树或树的直径需要更好的定义。为广义二叉树解决此问题的最简单方法是将路径长度定义为两片叶子之间,或者如果没有两片叶子,则从根到其叶子,例如1.否则递归构造中断。同样,一般树可以简单地使其成为所有孩子的直径中最大的,而不仅仅是左侧和右侧。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-24
    • 1970-01-01
    • 2021-09-23
    • 1970-01-01
    • 2018-01-30
    • 1970-01-01
    • 2017-03-17
    相关资源
    最近更新 更多