如何在列奥纳多堆中找到根的左右子结点

How to find the left and right children of root in Leonardo heap?

本文关键字:左右 结点      更新时间:2023-10-16

根据本文,树的根在位置L(k) - 1。Ltk-1子树的根在位置L(k -1) -1。Ltk-2子树的根在位置L(k) -2。

有人能帮我理解一下吗?我正在尝试实现平滑排序。

假设你有一个k阶的列奥纳多堆存储在一个数组中,你递归地进行布局,这样你总是布局较大的子树,然后是较小的子树,然后是根节点。这意味着数组中总共有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)

希望你喜欢我的文章!: -)