2012-02-25 2 views
0

여기에 입력을 희망합니다. 나는 2 차원 바이너리 검색 트리 클래스를 만들었다. 모든 작업 (삽입, 삭제 등)을해야합니다. 나는 주변에서 벗어날 수없는 문제에 직면 해있다. 현재 각 노드에 데이터 멤버가 있습니다.이 노드는 삭제 경로 (상대적 높이, 각 하위 트리의 극값 값 등) 내에서 업데이트해야합니다. 문제는 성공하기 위해 부울 값을 반환하는 delete 메서드가 필요하다는 것입니다. 의미, 노드가 존재하지 않으면 false가 반환됩니다. 그렇지 않으면 true.BST에서 삭제 경로 업데이트

private boolean delete (Node n, Value val, boolean cut) { 
    // Base case 
    if(n == null) return false; 
    if(node to be deleted) { 
     // Do all sorts of swapping, recursive deletion calls 
    } 
    else { 
     // Move around the tree until I find a node or hit null 
     if(is in left subtree) 
     delete(t.left, val, !cut); 
     if(is in right subtree) 
     delete(t.right, val, !cut); 
    } 

    // Here is where updating happens 
    someUpdateFunction(n); 

    // Now java here is forcing me to return something, so I have to return true or false 
    return true; 
} 

다음 무슨 일이 일어나고 있는지에 대한 기본적인 아이디어를 얻을, 여기에 같은 외모를 삭제할 것입니다 나는 재귀 적으로이 문제를 해결하고, 그래서 각 함수 호출 나올 때, 나는 값

를 업데이트하고 그래서 내 문제는이 코드가 항상 실행되기 때문에 나는 항상 사실로 돌아가고 있다는 것입니다. 아무도 내 삭제 경로를 업데이트 할 수있는 방법에 대한 아이디어가 있습니까? 노드가 존재하지 않으면 false를 반환 할 수 있습니까? 입력 해 주셔서 감사합니다.

+0

당신이 이미 해당 조건이'(N == NULL) 경우 false를 반환;' – John

+0

@ 존을 : 덕분에 주석 존을 위해,하지만 그건 사실 반환 알고리즘의 순환 구조입니다. –

답변

2
private boolean delete (Node n, Value val, boolean cut) { 
    boolean status = false; 
    // Base case 
    if(n == null) return false; 
    if(node to be deleted) { 
     // Do all sorts of swapping, recursive deletion calls 
    } 
    else { 
     // Move around the tree until I find a node or hit null 
     if(is in left subtree){ 
      status = delete(t.left, val, !cut); 
     }else if(is in right subtree){ 
      status = delete(t.right, val, !cut); 
     }   
    } 

    // Here is where updating happens 
    someUpdateFunction(n); 

    return status; 
} 
+0

와우, 나는 그것이 단순한 무엇인지 알았다. 정말 고마워. –