2015-09-20 56 views
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; 
} 

我在搜索堆棧溢出這個問題。但編碼很難被我理解爲有人使用遞歸過程。我必須在C++中創建一個FUNCTION來檢查數組A是否是Min Heap?如果是最小堆則返回true,否則返回false

我在Min Heap中知道每個父節點都小於或等於它的子節點...我也知道我們使用公式Tree [K/2]代表樹中的父節點,其左邊的子節點是Tree [2K ]及其右子樹是[2K + 1],只有當我們從1開始,我們的數組這是真的不爲0

有三種情況來檢查我的數組是最小堆與否:
1。內部節點有左右兩邊的孩子。
2.最後一個節點可能只有一個孩子離開孩子。
3.樹葉沒有任何孩子。

,但我不明白我怎麼能做到這一點的代碼的形式在我的計劃...... PLZ修改我的計劃或給我暗示,我怎麼能做到這一點.... ????

+0

固定縮進 –

+0

恩,這裏已經有一個C++函數。不需要寫你自己的。 '的std :: is_heap'。 –

回答

0

您可以通過下面的代碼獲得所需的答案。你需要迭代直到你檢查了樹中的所有節點。在這裏我通過檢查循環是否運行到size/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; 
    } 
} 
+0

如果我的數組的大小爲= 5,則for循環將運行5次,即,從1到5..When I = 3然後 ([3] <一個[6] && [3] <一個[7] ) 但我的數組中不存在[6]或[7],因爲我的數組的大小= 5 –

+0

我沒有調試器來檢查現在,但應該工作! –

相關問題