得到这个堆:
10
/ \
9 8
/ \ / \
7 6 5 4
/ \ /
3 2 1
我将展示将其从最大值转换为最小堆时的每个步骤。我不确定我该怎么做,请问有什么帮助吗? 谢谢。
尝试按级别遍历树,从最低节点开始
如果你的堆用数组来表示,那就很简单了
1.步骤
比较 1 和 6,然后切换:
10
/ \
9 8
/ \ / \
7 1 5 4
/ \ /
3 2 6
下一步 - 比较 2 和 7(以及切换):
10
/ \
9 8
/ \ / \
2 1 5 4
/ \ /
3 7 6
下一步 - 比较 3 和 2(并且没有切换):
10
/ \
9 8
/ \ / \
2 1 5 4
/ \ /
3 7 6
下一步 - 比较 4 和 8(以及切换):
10
/ \
9 4
/ \ / \
2 1 5 8
/ \ /
3 7 6
等等。这应该创建最小堆
用 C++ 编写一个程序,从文本文件中读取一组数据(将是节点值)以构造最大堆,然后代码将其转换为最小堆。 (使用一维数组来实现堆)。