0

在我的代码中,我创建了一个 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)->removeR(head,id)->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之后编写它,但是代码无法正常工作,有人知道吗?

4

0 回答 0