从最大堆转换为最小堆

问题描述 投票:0回答:2

得到这个堆:

         10
        /  \
       9    8
      / \  / \
     7  6  5  4
    / \ /
   3  2 1

我将展示将其从最大值转换为最小堆时的每个步骤。我不确定我该怎么做,请问有什么帮助吗? 谢谢。

heap
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

等等。这应该创建最小堆


0
投票

用 C++ 编写一个程序,从文本文件中读取一组数据(将是节点值)以构造最大堆,然后代码将其转换为最小堆。 (使用一维数组来实现堆)。

© www.soinside.com 2019 - 2024. All rights reserved.