2012-02-25 25 views
0

ここに入力を希望します。私は2次元二分探索木クラスを構築しました。私はすべての操作(挿入、削除など)が必要なように機能しています。私は周りを回っているように見えないという問題にぶつかった。私は現在、削除パス(相対的な高さ、それぞれのサブツリーの極値など)内で更新されなければならない各ノードにデータメンバーを持っています。問題は、成功することを表すブール値を返すdeleteメソッドが必要なことです。意味、ノードが存在しない場合、falseが返されます。そうでなければ真。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

@ジョン:ありがとうコメントジョンのために、それがtrueを返しているアルゴリズムの再帰的な構造です。 –

答えて

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

うわー、私はそれが何か簡単だと分かっていました。本当にありがとう。 –

関連する問題