如果我有一个数组表示包含值{2,8,3,10,16,7,18,13,15}的最小二进制堆,那么在插入值4之后数组会是什么样子?另外,我如何证明这是正确的?
我推断它将是2,4,3,10,8,7,18,13,15,16。这是对的吗?
答案 0 :(得分:3)
为了证明你的最小堆是正确的,你需要递归地证明你的子节点大于你的根节点
如果根节点为n,则子节点为2n + 1和2n + 2,因此遍历树并检查子节点是否大于父节点。如果这个逻辑在任何地方都不满意,那么你的堆就坏了。
2
8 3
10 16 7 18
13 15
推到最后
2
8 3
10 **16** 7 18
13 15 4
与父母进行比较和替换
2
**8** 3
10 4 7 18
13 15 16
比较并替换为父母 - 无替代
**2**
4 3
10 8 7 18
13 15 16