あなたはとても混乱しているようです。ヒープデータ構造を設計するために使用している参照をすべて読み直す必要があると思います(またはウィキペディアの記事の関連セクションを読みます)。
あなたの親がにいる場合、0
あなたの子供はにい2*(0)+1=1
ます2*(0)+2=2
。この場合、1 < vectorObject.size()
はtrueになりますが、2 < vectorObject.size()
falseになります。つまり、左の子はありますが、右の子はありません。
Vector
(またはArrayList
私の提案に従って切り替えた場合)はゼロベースなので、ではなく、かどうかを確認する必要がありi < vectorObject.size()
ますi <= vectorObject.size()
。その場合i < vectorObject.size()
はi
合法的なインデックスです。
アップデート:
ここでロジックを構成する方法は2つあります。一人っ子の場合と二人っ子の場合をまったく異なる方法で処理する必要がある場合は、おそらくこれが最適に機能します。
int size = vectorObject.size();
if (2*i+2 < size) { /* Two-child case */ }
else if (2*i+1 < size) { /* One-child case */ }
else { /* No children case */ }
2つのノードを別々に処理する場合は、ネストの方が適している可能性があります。
int size = vectorObject.size();
if (2*i+1 < size) {
// Handle left child
if (2*i+2 < size) {
// Handle right child
}
else {
// No right child
}
}
else { /* No children */ }