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. リーフには子がありません。
しかし、プログラムのコードの形でそれを行う方法を理解できません...プログラムを変更するか、ヒントを教えてください。どうすればそれを行うことができますか....????