2013-04-13 71 views
-1

http://www.cs.arizona.edu/~mercer/Projects/BSTRemoveGeneric.pdf从删除节点二叉搜索树

我有编码这个麻烦! 我不知道为什么这不起作用!它让我疯狂! 删除OrderedSet的方法。 这是我的代码

public boolean remove(E element) 
{ 
    if(root == null) 
    { 
     return false; 
    } 
    if(!contains(element)) 
    { 
     return false; 
    } 
    else if(root.data.equals(element) && root.left != null) 
    { 
     root = root.left; 
     return true; 
    } 
    //return remove(element, root); 
    else 
    { 
     TreeNode curr = root; 
     TreeNode prev = root; 
     while(element.compareTo(curr.data) != 0 && curr != null) 
     { 
      prev = curr; 
      if(element.compareTo(curr.data) < 0) 
      { 
       curr = curr.left; 
      } 
      else// if(element.compareTo(curr.data) > 0) 
      { 
       curr = curr.right; 
      } 
     } 
     if(curr.left == null) 
     { 
      if(curr == prev.left) 
      { 
       prev.left = curr.right; 
      } 
      else// if(curr == prev.right) 
      { 
       prev.right = curr.right; 
      } 
      return true; 
     } 


     else// if(curr.left != null) 
     { 
      OrderedSet<E> temp = new OrderedSet<E>(); 
      temp.root = curr.left; 
      System.out.println("\n\n\n\n" + curr.data + "\n" + prev.data + "\n" + temp.toStringInorder() + "\n" + temp.max() + "\n\n\n\n"); 
      curr.data = temp.max(); 
      TreeNode ref = curr; 
      while(curr.right != null) 
      { 
       ref = curr; 
       curr = curr.right; 
      } 
      ref = ref.left; 
      return true; 
     } 
    } 

错误:

调用相交之后插入G A dÇ

失败大小后删除( “G”)后失败。

无法删除根节点时根节点已离开儿童(

失败的十字路口时都具有三个相同的元件

失败删除根与多至

失败后去掉右插入(“M”);插入(“G”);删除(“M”);

您是否使用'=='而不是'equals'?insert(new Integer(50))插入(新整数(75));删除(新整数(50));

除去在

失败尺寸

+0

确切的错误是什么?这么少的信息是不可能的。 – acdcjunior

+0

插入G A后删除(“G”)后失败C 调用交叉点后失败大小。 无法删除根节点时根节点已离开儿童( 失败的十字路口时都具有三个相同的元件的 失败删除根与多至 失败插入物(“M”)后除去的权利;插入(“G”);删除(“M”);删除(“M”); 您是否使用'=='而不是'equals'?insert(new Integer(50)); insert(new Integer(75)); remove (新Integer(50)); 删除期间失败的大小(出现2次) (只显示9个提示中的8个) –

+0

对不起,但这还不够,您给我们发送来自外部的错误消息您要发布的电子邮件代码。 Afaik,这个错误可能不在你所提供的代码的这一部分。 – acdcjunior

回答

0

确定(仅9个所示的提示8)你想有以下

f(!contains(element)) 
{ 
    return false; 
} 

考虑这样的情况(2次),其中元件你正在移除存在于树中,这意味着你正在做这个额外的计算。

Here's一些代码,我写了很久以前。警告:它非常长 - 大部分是多余的。

+0

我已经有了这个方法。在整个java文件中,这只是它的一部分。 –