私たちは皆知っているように、完全なバイナリツリーに挿入するときは、すべてのリーフのすべての子を左から右に塗りつぶす必要があります。私は完全なバイナリツリーにノードを挿入する次のメソッドを持っています。Javaで完全なバイナリツリーにノードを挿入する方法は?
//fields
private T item;
private int size;
private CBTree<T> left, right;
//add method
public void add(T item)
{
if(left == null)
{
left = new CBTree<T>(item);
size += left.size;
}
else if(right == null)
{
right = new CBTree<T>(item);
size += right.size;
}
else if(!((left.left != null) && (left.right != null)) &&
((right.left == null) || (right.right == null)))
{
left.add(item);
}
else
{
right.add(item);
}
}
この実装に問題が11ノードの後に、それは次の行は、このツリーのルートを再割り当てされているので、私はこれが起こっていることを理解し8の代わりに、6の左の子に12ノードを追加することです根の左の子になる。
left.add(item);
は、だから、元の値に戻すルートを変更する方法はあり2.にルートを変更していますか?私はスタックとキューを使用せずにこれを達成しようとしています。
重複がありますか? http://stackoverflow.com/questions/20890929/how-to-implement-a-complete-binary-tree-using-recursion-without-comparing-the-va –
@JimMischel私の質問はリンク先の質問とは異なります。彼らの解決策は私と同じ場所で失敗するように見えます。私はDukelingのおかげでこのメソッドを実装する正しい方法を見つけ出しました。私は解決策を少しでも投稿します。 – Buttyfade