matplot绘制大顶堆建堆操作
步骤 1:安装系统依赖
1.根据你的操作系统,安装 Graphviz 的相关依赖:
Linux (Ubuntu/Debian 系列)
运行以下命令安装 Graphviz 和其开发工具:
1 |
|
MacOS
使用 brew 安装:
1 |
|
Windows
下载并安装 Graphviz 官方安装程序。
安装完成后,将 Graphviz 的路径(通常是 C:\Program Files\Graphviz\bin)添加到系统的 PATH 环境变量中。
2.安装 matplotlib 和 networkx 库:
1 |
|
步骤 2:程序设计
代码
1 |
|
执行结果
对于数组 [48, 62, 35, 77, 55, 14, 35, 98]
,我们将按照 大顶堆 的规则从最后一个非叶子节点向上逐步进行堆化操作。以下是构建大顶堆的详细步骤:
1. 初始数组(完全二叉树结构)
初始数组的结构为:
1 |
|
2. 找到最后一个非叶子节点
对于一个数组,最后一个非叶子节点的索引为 n // 2 - 1
,其中 n
是数组的长度。
- 数组长度
n = 8
- 最后一个非叶子节点索引:
8 // 2 - 1 = 3
- 最后一个非叶子节点的值为 77。
3. 从最后一个非叶子节点开始堆化
步骤 1:堆化节点 77(索引 3)
- 左子节点:
2 * 3 + 1 = 7
,值为 98。 - 右子节点:
2 * 3 + 2 = 8
(不存在)。 - 98 > 77,交换 77 和 98。
堆调整结果:
1 |
|
步骤 2:堆化节点 62(索引 1)
- 左子节点:
2 * 1 + 1 = 3
,值为 98。 - 右子节点:
2 * 1 + 2 = 4
,值为 55。 - 98 > 62,交换 62 和 98。
堆调整结果:
1 |
|
继续堆化节点 62(索引 3):
- 左子节点:
2 * 3 + 1 = 7
,值为 77。 - 右子节点:
2 * 3 + 2 = 8
(不存在)。 - 77 > 62,交换 62 和 77。
堆调整结果:
1 |
|
步骤 3:堆化节点 48(索引 0)
- 左子节点:
2 * 0 + 1 = 1
,值为 98。 - 右子节点:
2 * 0 + 2 = 2
,值为 35。 - 98 > 48,交换 48 和 98。
堆调整结果:
1 |
|
继续堆化节点 48(索引 1):
- 左子节点:
2 * 1 + 1 = 3
,值为 77。 - 右子节点:
2 * 1 + 2 = 4
,值为 55。 - 77 > 48,交换 48 和 77。
堆调整结果:
1 |
|
继续堆化节点 48(索引 3):
- 左子节点:
2 * 3 + 1 = 7
,值为 62。 - 右子节点:
2 * 3 + 2 = 8
(不存在)。 - 62 > 48,交换 48 和 62。
堆调整结果:
1 |
|
4. 最终的大顶堆
经过以上步骤,最终的大顶堆为:
1 |
|
对应的数组表示为:[98, 77, 35, 62, 55, 14, 35, 48]
.
matplot绘制大顶堆建堆操作
https://clint456.github.io/2024/11/27/数据结构-year-11-27-matplot绘制大顶堆建堆操作/