bstの通常の再帰コードでは、ツリーの左と右の要素はすべての再帰呼び出し(In t.left =とt.right =)で設定されます。 これはツリーを再構築していませんか?再帰的挿入時にバイナリ検索ツリーが再構築されますか?
以前のノードへの参照を保存してから、値に応じて新しいノードを左または右に追加したり、ここに何か不足していませんか?ありがとう!
public Elem insert (Elem t, int toInsert)
{
if (t == null)
return new Elem(toInsert,null,null);
else {
if (toInsert < t.value)
t.left = insert(t.left, toInsert);
else
t.right = insert(t.right,toInsert);
return t;
}
}
新しい要素を1つ挿入すると、コードはすべての要素またはサブツリーを左右に割り当てます。私の質問は、これがオーバーヘッドではないということですか?リンクされたリストに挿入するには、最後のノードに移動してリンクを実行するだけです。ここでは、各挿入時にツリー全体のリンケージを実行します。これを避けるための選択肢はありますか?
ただし、1回の挿入でルートから始まり、最後まで再び左右参照が割り当てられていませんか? – Stacky
ツリーを横切って再構築しない – ravthiru
"調整"とは何ですか?実際に何が起きるかについての詳細t.left =とt.right = – Stacky