C++ 如何在莱昂纳多堆中找到根的左右子级?

C++ 如何在莱昂纳多堆中找到根的左右子级?,c++,data-structures,tree,smoothsort,C++,Data Structures,Tree,Smoothsort,根据,, 树的根位于位置L(k)-1。 Ltk-1子树的根位于位置L(k-1)-1。 Ltk-2子树的根位于位置L(k)-2 有人能帮我理解吗??我正在尝试实现smoothsort 让我们假设一个数组中存储了一个k阶的Leonardo堆,然后递归地进行布局,以便始终布局较大的子树,然后是较小的子树,然后是根节点。这意味着数组中总共有L(k)个节点,在编号为0,1,2,3…,L(k)-1的位置。它看起来像这样: +---------------------------+--------------

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


有人能帮我理解吗??我正在尝试实现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)


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

谢谢你,我现在明白多了