我正在编写一个应该修剪决策树的函数。该函数应删除树中“实例数组长度”小于给定输入长度的任何节点(此决策树包含保存值数组的节点)。我的问题(我认为)是将节点引用传递给此方法,然后将 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