2009-11-09 45 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.