1
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/2]を使用してツリー[K]で親を表し、その左の子はツリー[2K]であり、その右child は Tree[2K+1] であり、これは、配列を 0 ではなく 1 から開始する場合にのみ当てはまります。

配列が最小ヒープかどうかを確認するには、次の 3 つのケースがあります
。 1. 内部ノードに左右両方の子がある。
2. 最後のノードには、左の子である子が 1 つだけある場合があります。
3. リーフには子がありません。

しかし、プログラムのコードの形でそれを行う方法を理解できません...プログラムを変更するか、ヒントを教えてください。どうすればそれを行うことができますか....????

4

1 に答える 1