決定木を剪定する関数を書いています。この関数は、「インスタンス配列の長さ」が指定された入力長よりも小さいツリー内のノードを削除する必要があります (このディシジョン ツリーには、値の配列を保持するノードが保持されます)。私の問題 (私が思うに) は、このメソッドにノード参照を渡してから、関数内の任意のノードに null を割り当てても、これらのノードがグローバルに削除されないことです。ローカル参照を削除するだけです。ここに私が書いたコードがあります:
private void pruneRecursively(DTNode crt, int l){
if(crt.a.length < l){
removeSubNodes(crt);
}
else{
if(crt.left != null) //if current node has a left child
pruneRecursively(crt.left, l);
if(crt.right != null) //if current node has a right child
pruneRecursively(crt.right, l);
}
}
private void removeSubNodes(DTNode crt)
if(crt.left != null)
removeSubNodes(crt.left);
if(crt.right != null)
removeSubNodes(crt.right);
//crt.a = null;
crt = null;
インスタンス配列の長さが入力の長さ l より小さいノードがツリーから完全に削除されるように、このコードを別の方法で記述するにはどうすればよいですか?
編集 これはノードクラスのヘッダーです。関連情報のようです:
public class DTNode {
Instance[] a; //array of instance variables
double testValue; //determines where to split data
DTNode left, right; //each node links to two child nodes