2011-12-26 105 views
0

我正在檢查Max-Hep以查看父項是否有子項。我的堆被實現爲一個向量。起初,我寫了一個函數bool hasChildren(int loc)loc是父節點在堆中的位置。 我的主要條件是:堆中的父項是否有子項

if(heap[2*loc + 1] == NULL && heap[2*loc + 2] == NULL) //if there are children 

的問題是,你不能檢查出界指數的...我想指針計算但這是無效了。有沒有人建議如何檢查堆中的父母是否有孩子?

謝謝!

+0

是你的實現中的一個向量?在這種情況下,您可能需要刪除C標籤。 – 2011-12-26 18:58:34

+2

但是,如果至少有一個子索引是非空的,那麼您的節點是否應該有其他方法? – Vlad 2011-12-26 19:02:04

回答

0

的問題是,你不能檢查出界指數

如果這是一個std::vector,您可以使用它的at成員函數並捕獲std::out_of_range異常。

1

您是否知道heap有多大malloc ed是?如果是這樣,只要確保2 * loc + 1和2 * loc + 2在該範圍內。如果heapmalloc版有N個元素,確保2 * LOC + 1個2 * LOC + 2 N多是少:

if(((2*loc+1 < N) && (heap[2*loc + 1] == NULL)) && 
    ((2*loc+2 < N) && (heap[2*loc + 2] == NULL))) 
+0

哈哈哈哇...是的,我可以訪問堆的大小。非常感謝! – CodeKingPlusPlus 2011-12-26 19:02:27

相關問題