algorithm - 特殊的二叉树,一个棘手的问题?

标签 algorithm data-structures graph tree binary-tree

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

I) 标签的总和属于 O(n log n) 的顺序。

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

III) 有一棵树,其标签的总和属于 O(n^2) 的顺序。

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

最佳答案

我猜是 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) 结束。

关于algorithm - 特殊的二叉树,一个棘手的问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37236802/

相关文章:

C 合并排序段错误

c - 如何让下面的递归更快?

PYTHON-给定一个起始单词,哪个字母序列将使您可以最大化可以拼写的有效单词的数量

r - 两个数据帧的最小高尔距离

algorithm - 如何打印二叉搜索树?

javascript - 分组图表栏上的 d3 栏标签

algorithm - 寻找有界子图之间的最小割集

performance - 用于查找许多集合中哪些是另一个集合的子集的算法/数据结构

algorithm - SPOJ DQUERY : TLE Even With BIT?

r - X 轴标签在 ggplot2 中被截断