如何在列奥纳多堆中找到根的左右子结点
How to find the left and right children of root in Leonardo heap?
根据本文,树的根在位置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)
希望你喜欢我的文章!: -)
相关文章:
- FLTK 2.0构建和演示,适用于VS2019的2011年左右的代码库
- 不使用与左右停止工作命名空间 std 的简单比较
- 如何在同一行上格式化左右对齐?
- C 在同一行中左右显示文本
- 使用mynteye立体声摄像机在ROS中发布左右视频
- 如何在x轴左右绘制图形
- 是否可以从SFML中的音频样本中左右通道分开
- 单元测试 - 仅在"int main()"左右重新编译以减少编译时间
- 使用二维数组作为一维数组是否正确?可能会导致未定义的行为左右?
- 是GLM矩阵乘法左右
- python永远不能调用包含继承逻辑的c++dll或左右文件
- 分别计算左右孩子的二进制树
- 逗号操作员的左右操作数没有效果(警告)
- 操作员 左右超载
- 在二进制搜索树中左右打印子树
- 在C 中使用SFML.尝试在循环中播放WAV文件,但仅播放第一秒钟左右
- QSystemTrayicon左右单击左右单击
- clang 3.6倍左右表达
- 避免在C++中与树的左右子项重复
- 如何在列奥纳多堆中找到根的左右子结点