当前位置: 首页 > 知识库问答 >
问题:

我必须在 C 中创建一个函数来检查数组 A 是否是最小堆?如果是最小堆,则返回 true,否则返回 false

梁渊
2023-03-14
bool isMinHeap(int A[],int size)
{
    for(int i=1; i<=size; i++)
    {
        if((A[i]<=A[2i]) && (A[i]<=A[2i+1]))
            t=1;
        else
        {
            t=0;
            break;
        }
    }
    if(t==1)
        return true;
    else return false;
}

我在堆栈溢出中搜索这个问题。但我很难理解编码,因为有人使用递归过程。

我知道在最小堆中,每个父节点都小于或等于它的子节点…我也知道我们在树[K]中使用公式树[K/2]表示父节点,它的左子节点是树[2K],它的右子节点是树[2K1],只有当我们从1而不是0开始数组时,这才是真的。

有三种情况可以检查我的数组是否是min heap:
1.内部节点既有左子节点也有右子节点。
2.最后一个节点可能只有一个子节点,这是左子节点。
3.叶子没有任何子节点。

但是我不明白如何在我的程序中以代码的形式实现它...请修改我的程序或给我提示,我该怎么做....????

共有1个答案

司徒运锋
2023-03-14

您可以使用下面的代码来获得所需的答案。您需要迭代,直到检查完树中的所有节点。在这里,我通过检查循环是否运行到大小/ 2来执行此操作。假设如果数组的大小,我会检查它的大小/2= 5/2 =2,即(c==2)我希望它会有所帮助!

     void minheap()        
     {
    int c=0;

for(int i=1;i<=size;i++)
    {
        if(a[i]<a[i*2] && a[i]<a[i*2+1])
        {
              c++;
        }
    }
    if(c==size/2)
    {
        cout<<"Min heap";
        //return true;
    }
    else
    {
        cout<<"Not Min heap";
        //return false;
    }
}
 类似资料:
  • 如何让prolog中的谓词返回值? 我需要找到一个树的节点,并检查它是否是一个最小堆。我猜是这样的:- 到目前为止我的代码是这个 输入的类型是- 输出应该为真。

  • 编写一个方法,根据字符(char)[输入]是否是要编码的有效字符,返回true或false。即,如果输入[输入字符]为'a'-'z'或'a'-'z',则返回true,否则返回false。 为什么我的答案错了???? 公共静态布尔isValidChar_Q1(char chr){ }

  • 问题内容: 我在node.js中编写一个函数来查询PostgreSQL表。 如果该行存在,我想从该行返回id列。 如果不存在,我想将其插入并返回ID()。 我一直在尝试和语句的变体,但似乎无法使其正常工作。 问题答案: 我建议在数据库端进行检查,然后将ID返回给nodejs。 例子: 而不是在Node.js端(在此示例中,我使用的是node-postgres):

  • 本文向大家介绍请写一个C函数,若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1 相关面试题,主要包含被问及请写一个C函数,若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1 时的应答技巧和注意事项,需要的朋友参考一下   剖析:嵌入式系统开发者应该对Little-endian和Big-endian模式非常了解。采用Littl

  • 问题内容: 当前,在我们的测试环境中,最大和最小JVM堆大小设置为相同的值,基本上与专用服务器计算机为我们的应用程序所允许的大小相同。这是性能最佳的配置,还是给JVM一个更好的范围? 问题答案: 设置- Xms的主要原因是,如果您在启动时需要一定的堆。(防止OutOfMemoryErrors在启动时发生。)如上所述,如果您需要启动堆来匹配最大堆,则是匹配它的最大时间。否则,您将不需要它。只是要求应