2016-04-21 24 views
1

バイナリ検索ツリーで最大のノードを削除しようとしていますが、以下のコードではそれができるはずですが、何らかの理由でそうでないと思います。誰か助けてください!バイナリ検索ツリーで最大のノードを削除する方法

public void remove() { 
      Node current = root; 

      while(true){ 
       Node parent = current; 
       current = current.getRighChild(); 

       if (current == null){ 
        parent.setRighChild(null); 
        return; 
       } 
      } 
     }  

答えて

-1

あなたのコードでは、右側のノードが空であればそれを削除しています。それが最大である場合には、電流を削除する代わりに。右端の非リーフノードは、あなたが回転する必要が左の子を持つ場合

removeLargest() { 
      current = getRoot(); 
      rightNode == null; 

      while (root.Right){ 
        current == root.Right 
      } 
      if (current.left()){ 
       rotate() 
      } 
      current.delete() 
     } 
+1

:このような何かを試してみてください。 – EJP

+0

@EJPありがとうございました –

+0

私はちょうど再帰的に働いた。たぶんあなたはそれを見て、バグがあるかどうかを見ることができます。 – Ali

0
public void remove() 

     { 
     root = deleteMax(root); 
     }  

    private Node deleteMax(Node x) { 
    if (x.getRighChild() == null) 
     { 
     return x.getLeftChild(); 

     } 
    x.setRighChild(deleteMax(x.getRighChild())); 
    return x; 

}

関連する問題