我确实有一个问题......我必须为二进制搜索树编写一个删除方法,到目前为止我所拥有的是下面但是我一直得到一些与我的删除方法相关的错误而我不是确定为什么...有人可以检查我的代码。谢谢。我也尝试创建一个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 );
}
*/
答案 0 :(得分:1)
obj
是E
而非TreeNode383<E>
的实例,因此它没有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
,则不是。
此处有太多错误可以理解您的代码。尝试一次实现一个功能。
答案 1 :(得分:0)
ya ..有一些错误...基本上,要从BST中删除节点N,请用N右子树中的最小元素替换N.