在我的代码中我创建了一个TreeNode类,其中每个节点都有一个int N字段,即子树的数量,这是删除随机BTS树中TreeNode的代码
void remove(int id)
{
if(isID(id)) {
removeR(head,id);
}else
{
System.out.println("There's no warehouse with that ID!");
}
}
private TreeNode removeR(TreeNode h,int id)
{
if (h==null) return null;
int TreeNodeID=h.getId();
if(id<TreeNodeID)
removeR(h.l,id);
if(id>TreeNodeID)
removeR(h.r,id);
if(id==TreeNodeID)
h=joinLR(h.l,h.r);
return h;
}
private TreeNode joinLR(TreeNode a,TreeNode b)
{
int NA=a.N+b.N;
if(a==null)
return b;
if(b==null)
return a;
if(Math.random()*NA<1.0*a.N)
{
a.r=joinLR(a.r,b);
return a;
} else
{
b.l=joinLR(a,b.l);
return b;
}
}
如果我插入例如ID为1的TreeNode并选择删除此节点,代码将执行:remove(id) - &gt; removeR(head,id) - &gt; h = joinLR(hl,hr ),我的问题是在joinLR函数中这段代码
int NA=a.N+b.N;
将使下两个ifs死代码
if(a==null)
return b;
if(b==null)
return a;
我做了很多例子,如果我使用a或b代码将无法使用,唯一的解决方案是在两个ifs之后编写它,但是然后代码无法正常工作,有没有人有任何想法?