Я должен создать FUNCTION в C++, чтобы проверить, является ли массив A Min Minap или нет? Если это Min Heap, тогда верните true, иначе верните false

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;
}

Я ищу этот вопрос в переполнении стека. Но мне сложно понять кодировку, поскольку кто-то использовал рекурсивную процедуру.

Я знаю, что в Min Heap каждый родительский узел меньше или равен своим дочерним элементам... я также знаю, что мы представляем родительский элемент в Tree[K] с использованием формулы Tree[K/2], а его левый дочерний элемент равен Tree[2K], а его правый child это Tree[2K+1], и это верно только в том случае, если мы начинаем наш массив с 1, а не с 0.

Есть три случая, чтобы проверить, является ли мой массив минимальной кучей или нет:
1. Внутренние узлы имеют как левого, так и правого потомка.
2. Последний узел может иметь только одного дочернего, который остается дочерним.
3. У листьев нет ни одного ребенка.

но я не могу понять, как я могу сделать это в виде кода в моей программе... PLZ изменить мою программу или дать мне подсказку, как я могу это сделать....????

1 ответ

Вы можете код ниже, чтобы получить требуемый ответ. вам нужно повторять, пока вы не проверили все узлы в дереве. здесь я делаю это, проверяя, работает ли цикл до размера /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;
    }
}
Другие вопросы по тегам