【发布时间】:2016-10-28 07:48:57
【问题描述】:
根据this article, 树的根在位置 L(k) - 1。 Ltk-1 子树的根在位置 L(k - 1) - 1。 Ltk-2 子树的根在位置 L(k) - 2。
有人可以帮我理解吗?我正在尝试实现平滑排序。
【问题讨论】:
标签: c++ data-structures tree smoothsort
根据this article, 树的根在位置 L(k) - 1。 Ltk-1 子树的根在位置 L(k - 1) - 1。 Ltk-2 子树的根在位置 L(k) - 2。
有人可以帮我理解吗?我正在尝试实现平滑排序。
【问题讨论】:
标签: c++ data-structures tree smoothsort
假设您有一个 k 阶 Leonardo 堆存储在一个数组中,并且您递归地进行布局,以便始终布局较大的子树,然后是较小的子树,然后是根节点。这意味着数组中总共有 L(k) 个节点,位置编号为 0、1、2、3...,L(k) - 1。看起来像这样:
+---------------------------+----------------------+------+
| Tree of order k - 1 | Tree of order k - 2 | root |
+---------------------------+----------------------+------+
注意根在最后,所以它在位置 L(k) - 1 因为我们使用的是零索引。
那么这两个子树在哪里呢?好吧,k - 2 阶的子树就在根节点之前。它的布局方式是它的根在最右边。所以要找到它的根,我们要到整棵树的根(位置 L(k) - 1)并后退一步到达位置 L(k) - 2。
k - 1 阶的子树呢?好吧,请注意它舒适地位于我们代表的前面。它的根节点将位于该块的末尾,位于位置 L(k - 1) - 1 处(类似于我们较大的 k 阶树的根在位置 L(k) - 1 处。)
希望你喜欢我的文章! :-)
【讨论】: