【问题标题】:remove method in java BSTjava BST中的删除方法
【发布时间】:2009-11-09 23:16:27
【问题描述】:

我确实有一个硬件问题...我必须为二叉搜索树编写一个删除方法,到目前为止我所拥有的内容如下,但我不断收到一堆与我的删除方法相关的错误,但我没有确定为什么...有人可以检查我的代码吗?谢谢你。我也尝试创建一个 find 方法,但我也遇到了一些麻烦......这一直在我的删除代码的底部。

import java.util.*;

class TreeNode383<E extends Comparable> {

  private E data;

  private TreeNode383<E> left;

  private TreeNode383<E> right;

  private TreeNode383<E> parent;

  public TreeNode383( ) { left = right = parent = null; }

  public TreeNode383( E d, TreeNode383 <E> l, TreeNode383 <E> r,
                     TreeNode383 <E> p) {

    data = d;

    left = l;

    right = r;

    parent = p;

  }

  public  E getData( ) { return data; }

  public void setData(E d) { data = d; }

  public TreeNode383<E> getLeft( ) { return left; }

  public void setLeft(TreeNode383<E> l) { left = l; }

  public TreeNode383<E> getRight( ) { return right; }

  public void setRight(TreeNode383<E> r) { right = r; }

  public TreeNode383<E> getParent( ) { return parent; }

  public void setParent(TreeNode383<E> p) { parent = p; }


  public String toString( ) {

    String answer = "";

    if (left != null) answer += left.toString( );

    answer += data + " ";

    if (right != null) answer += right.toString( );

    return answer;
  }
}

**The start of my remove method**


  boolean remove (E obj)
  {

 if(root == obj)

 return false;


 //when deleting a leaf just delete it

 else if(obj.getleft == NULL && obj.getright == NULL)
  parent = obj = NULL;


 //when deleting an interior node with 1 child
 //replace that node with the child

 else if(obj.getleft == NULL && obj.getright != NULL)
 obj.setright = new TreeNode383<E>(newData, null, null, null);

 else if(obj.getleft != NULL && obj.getright == NULL
 obj.setleft = new TreeNode383<E>(newData, null, null, null);


 //when deleting an interior node with 2 children
 //find left most node in right subtree,
 //promote it to replace the deleted node
 //promote its child to replace where it was



  /*
  private BinaryNode findMin( BinaryNode t )
  {
      if( t == null )
            return null;
      else if( t.left == null )
           return t;
      return findMin( t.left );
   }
 */

【问题讨论】:

    标签: java binary-search-tree


    【解决方案1】:

    objE 而不是 TreeNode383&lt;E&gt; 的实例,因此它没有 getLeft()getRight() 方法。即使是这样,你也拼错了。

    root 是什么?我在任何地方都看不到它的声明。

    这种语法也没有意义:

    obj.setright = new TreeNode383<E>(newData, null, null, null);
    

    setRight() 是方法而不是字段(Java 没有 C# 之类的属性)另外,名称中需要大写“R”。

    所以应该是这样的

    obj.setRight(new TreeNode383<E>(newData, null, null, null));
    

    也就是说,如果 newData 被声明了,那么它不是。

    这里有太多错误,无法理解您的代码。尝试一次实现一个功能。

    【讨论】:

      【解决方案2】:

      是的..有一些错误...基本上,要从 BST 中删除节点 N,请将 N 替换为 N 的右子树中的最小元素。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-05
        • 2018-10-11
        • 2014-05-26
        • 1970-01-01
        相关资源
        最近更新 更多