2016-04-30 13 views
1

これは現時点では私のコードです。私は削除された要素を返す方法を知らない。今はツリーの新しいルートを返しています。皆さんはいくつかの指針を提供していただけますか?ありがとう。Javaバイナリ検索ツリーの削除再帰的な戻り値が削除されました

public SomeDataType remove(String key) { 
    Node removed = remove(root, key); 
    if (removed != null){ 
     return removed.data; 
    } 
    return null; 
} 
// TO DO: RETURN REMOVED NODE 
private Node remove(Node n, String key) { 
    if (n == null) { 
     return null; 
    } 
    else if (n.data.getKey().compareTo(key) < 0){ 
     n.right = remove(n.right, key); 
    } 
    else if (n.data.getKey().compareTo(key) > 0){ 
     n.left = remove(n.left, key); 
    } 
    else{ 
     if (n.right != null){ 
      SomeDataType successor = leftMost(n.right).data; 
      n.data = successor; 
      n.right = remove(n.right, successor.getKey()); 
     } 
     else{ 
      n = n.left; 
     } 
    } 
    return n; 
} 
private Node leftMost(Node n) { 
    if (n.left == null){ 
     return n; 
    } 
    else{ 
     return leftMost(n.left); 
    } 
} 
+0

コードをどのように使用しているかを示します。同じ名前の2つのメソッドがあると問題になる可能性があります。 – localplutonium

答えて

2

ラッパーメソッドでは、キーを保持する変数を作成して返します。

public SomeDataType remove(String key) { 
    E data = key //E is a generic data type 
    Node removed = remove(root, key); 
    if (removed != null){ 
     return data; 
    } 
    return null; 
+0

美しいです。ありがとうございました –

関連する問題