【问题标题】:Removing from Red & Black Tree issue从红黑树问题中删除
【发布时间】:2014-03-23 22:00:33
【问题描述】:

我认为问题是根为空。有人会教我如何以正确的方式去做吗?因为我不知道为什么它是空的……我认为删除功能很好地实现了,但是由于 root 为空,它不会继续执行。请帮忙。 也欢迎任何建议:D

public static void main(String[] args) {
        Tree t = new Tree("");
        String msg;
        String[] inputs;
        Scanner sc = new Scanner(System.in);
        ArrayList <String> palavras = new ArrayList <String>();
        int i = 0;



        while (true) {
            msg = sc.nextLine();
            if (msg.equals("")) {
                break;
            }


            inputs = msg.split(" ");

            i = 0;

            while (i < inputs.length) {
                palavras.add(inputs[i]);
                i++;
            }
        }



        i = 0;
        while (i < palavras.size()) {
            if (palavras.get(i).equals("REMOVE")) {
                t.remove(palavras.get(i+1));
                palavras.remove(i+1);
                i+=1;


            } else {
                t.insert(palavras.get(i).toLowerCase());
                i++;
            }
        }   

        t.postorder();
        t.preorder();
        t.inorder();



    }


**********************************************************

public void remove( String word) 
    {
        Node father=root;
        Node actual=root;
        boolean leftnode=true;


        if(root!=null){

            while(!word.equals(actual.str))
            {
              father=actual;      

              if(word.compareTo(actual.str)<0)
              {
                  leftnode=true;
                  actual=actual.left;
              }
              else{
                leftnode=false;
                actual=actual.right;
              }

              if(actual==null){
               return ;
              }
            }

            actual.occ = 0;   
        }
    }

【问题讨论】:

  • 用调试器单步调试你的代码了吗?这应该是您的第一个猜测,Eclipse 甚至内置了一个非常舒适的。此外,英文变量名将有助于(至少我)更好地理解您的代码。
  • 是的,我调试了但不明白为什么会这样
  • 在某些时候,某些代码行必须将根设置为空。找到那条线。也许尝试使用硬编码的树,即为您知道树应该是什么样子的数组构建一个。
  • 我已经意识到并编辑了这句话。还是去找吧!
  • 还是什么都没有。我完全迷路了......

标签: java algorithm data-structures binary-search-tree red-black-tree


【解决方案1】:

我正在实现 Splay 树,它的工作原理与红黑树相同,但有时我被困在了这样的地方。我会建议你画出你的代码的流程图,然后重新编码。我希望你的问题能像我一样得到解决。 可以参考thisthis的文章。

【讨论】: