【问题标题】:Special Binary Tree, a tricky questions?特殊二叉树,一个棘手的问题?
【发布时间】:2016-05-15 09:50:18
【问题描述】:

我们有一个带有n 节点的二叉树。这棵树不一定是平衡的。对于这棵树的x这样的任何一个节点,我们计算该节点的leftright子树的大小(即:节点数),并将该节点的标签设置为这两个值的minimum (右尺寸和左尺寸子树的值)。如果任何子树的节点为零,则此大小等于0。以下哪项是正确的:

I) 标签总和属于订单O(n log n)

II)有一棵树,它的标签总和属于订单O(n)。 (即:是否有可能得到一棵其标签总和为 O(n) 的树?)

III)有一棵树,它的标签总和属于订单O(n^2)

我的助教说其中两个是真的。我的问题是这些句子,谁能帮我描述一下?

【问题讨论】:

  • 对于像你这样的专家@Jerry 这很明显。不适合我。还是谢谢
  • 你试过在纸上画它们还是只是猜测?
  • @SaraPhD 在平衡树中所有非叶节点的标签至少为 1,并且大约有 n/2 个非叶节点。因此,平衡树中的标签总和至少为 n/2——因此可证明不是 O(log n)。
  • 你真的不应该在不画树的情况下解决这些问题。
  • 我认为这些陈述写得不好。其中一些需要Θ而不是O。Aslo,“有一棵树”在渐近边界的上下文中没有意义,我们需要谈论一个无限的树族。

标签: algorithm data-structures graph tree binary-tree


【解决方案1】:

我的猜测是 1 和 2。

1.) 考虑树的高度。高度和节点数 n 具有关系 n = (2^h)-1。从这个关系,我们可以推导出 h = logn。现在,让我们来看看二叉树每一层的节点数。一个级别可以拥有的最大节点数是 (n/2),这是最后一级(在完整二叉树中,最后一级将有 n/2 个节点)。因此,计算最小值的最坏情况是(级别数)*(每个级别中的节点数)=> n/2logn => O(nlogn)。

2.) 通过改变树的高度可以获得 0(n) 解。例如,如果考虑所有节点的 子集 使得树的高度为零/一,那么就有可能获得 O(n) 解决方案 - 对于总级别为第二,最多可以有三个节点(根,左,右),因此,这里不涉及最小计算。在这种情况下,我们没有额外的登录运行时间,最终得到 O(n)。

【讨论】:

  • 也许(3)有反例或证明,我认为这是一个很好的问题。
  • 第二部分哪一部分不明白?
  • @SaraPhD 我尝试添加更多信息。希望这会有所帮助。
  • 我们如何确定(3)?
  • @SaraPhD 使用 (1),我说它需要 O(nlogn) 时间。所以对我来说,我们想用更短的运行时间来处理同样的问题是没有意义的(O(nlogn) 比 O(n^2) 好)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-25
  • 1970-01-01
  • 2012-08-18
  • 2011-07-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多