随机二进制搜索树的数据结构代码中的奇怪交互

时间:2018-01-16 01:41:01

标签: java data-structures binary-search-tree heap-randomization

在我的代码中我创建了一个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之后编写它,但是然后代码无法正常工作,有没有人有任何想法?

0 个答案:

没有答案