2009-11-09 6 views
1

나는 hw 질문이 ... 나는 이진 검색 트리에 대한 제거 방법을 써야만하는데, 지금까지 내가 가지고있는 것은 아래에있다. 그러나 나는 내 제거 방법과 관련된 많은 오류를 계속 갖고있다. 그리고 나는 왜 ... 누군가 내 코드를 점검 할 수 있는지를 확신하지 못한다. 고맙습니다. 나는 또한 find 메소드를 만들려고했지만 그걸로 몇 가지 문제가 있습니다 ... 그것은 제거 코드의 맨 아래에 있습니다.자바에서 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

obj 그래서 그것이 더 getLeft()getRight() 또는 방법이 없다 E하지 TreeNode383<E>의 인스턴스이다. 그리고 그랬다 할지라도 철자가 잘못되었습니다.

그리고 root은 무엇입니까? 나는 그 곳의 선언을 볼 수 없다.

이 구문은 아무 의미 중 하나

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

setRight()이 방법이 아닌 필드 (자바는 C#을 같은 속성이없는) 게다가 당신은 이름에 대문자 'R'을해야합니다.

그래서 아마 그 newData이가하지 않은 선언 된 경우입니다

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

해야한다.

코드를 이해하는 데 너무 많은 오류가 있습니다. 한 번에 하나의 기능을 구현해보십시오.

0

예 ... 몇 가지 오류가 있습니다 ... 기본적으로 BST에서 노드 N을 제거하려면 N을 오른쪽 하위 트리 N의 최소 요소로 대체하십시오.