2011-12-26 7 views
0

親が子を持つかどうかを確認するために、最大ヒープを調べようとしています。私のヒープはベクトルとして実装されています。最初に関数を書きました。bool hasChildren(int loc)locは、ヒープ内の親の位置です。 私の主な条件だった:ヒープの親に子があるかどうか

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

問題は、境界指標のうち、確認することができないということです...私はポインタ演算を考えたが、それはあまりにも無効です。誰かが、ヒープの親に子があるかどうかをチェックする方法を提案していますか?

ありがとうございました!

+0

実装ではですか?その場合は、Cタグを削除することができます。 –

+2

しかし、少なくとも1つの子インデックスがNULLでない場合、ノードに子ノードがある場合は、逆になるべきではありませんか? – Vlad

答えて

0

問題は、あなたが境界指標のうち、確認することができないということです

heapは、N個の要素を持っている malloc編だった場合は、2 * LOC + 1と2 * LOC + 2がN未満であることを確認してください

std::vectorの場合は、atメンバ関数を使用してstd::out_of_rangeの例外をキャッチすることができます。

1

heapはどのくらい大きいと知っていますかmallocになりましたか?その場合は、2 * loc + 1と2 * loc + 2がその範囲内にあることを確認してください。

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

haha​​ha wow ...はい私はヒープのサイズにアクセスできます。どうもありがとう! – CodeKingPlusPlus