2009-11-09 49 views
1

我有一个hw问题...我必须为二叉搜索树编写一个删除方法,到目前为止我所拥有的是以下但我不断收到一堆与我的删除方法相关的错误我不确定为什么...有人能够检查我的代码。谢谢。我也尝试创建一个查找方法,但是我也遇到了一些麻烦......这就是我的删除代码的底部。在java中删除方法BST

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); 
    } 
*/ 

回答

1

objETreeNode383<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宣布,它不是。

这里有太多的错误来理解你的代码。尝试一次实现一个功能。

0

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