私は、バイナリ検索ツリーに要素を追加するために、このJava再帰的なプログラムを発見した:それは最後のnを返してから、再度rootにそれを割り当てることがある理由を私は理解していないものをどのようにこの再帰関数をトレースするには?
public void add(int e){
root=add(root, e);
}
public Node add(Node n, int e){
if (n==null){
n=new Node(e);
} else {
if (e<n.elem){
n.left=add(n.left,e);
} else{
n.right=add(n.right,e);
}
}
return n;
}
です。 助けてください?
最後の 'return n'文は、左と右への再帰呼び出しが終了した後に呼び出されます。再帰を扱うチュートリアル(または教科書)を見直さなければなりません。 –
これを理解する最善の方法は、鉛筆と紙でそれを行い、空の木から始めることです。次に、コードをトレースし、値2,4、1、5を追加します。 'root'は最初の呼び出しでのみ実際のツリールートを参照します。その後、複数のレベルが下がると、 'root'は現在のサブツリーのルートを参照します。 –