2017-10-21 16 views
0

私はデータと右と左のノードの文字列値で実装された通常のバイナリ検索ツリーを持っています。ツリーは正常に動作しますが、私はrankOf関数に問題があります。私は再帰を使用してノードを見つけ、要素が存在するときにメソッドが成功するが、存在しない値が機能しないときに、これを助けるためにブール値を設定する方法を見つけることができない。ここでは、コードです:Java BST再帰変数の設定

private int rankOf(String s, Node n){ 
    if (n != null){ 

     //check root 
     if (s.compareTo(n.value) == 0){ 
      if (n.left != null){ 
       return size(n.left); 
      } 
      return 0; 
     } 
     // only worry about left tree, easy 
     if (s.compareTo(n.value) < 0){ 
      return rankOf(s, n.left); 
     } else { 
      // must count entire left tree plus root node 
      return rankOf(s, n.right) + size(n.left) + 1; 
     } 

    } 
    //null or not found 
    return 0; 
} 

ルートは、私は要素がそう何かがそこに行くが、これを処理する方法がわからないはずですツリーにある知っている値と同じです。

+0

「存在しない値が機能しない場合」は例外をスローしますか? plsはあなたのツリーを投稿します – CodeIsLife

+0

'' size''メソッドは何を返しますか?また、成功/失敗の場合にメソッドが返すべきものは何ですか? –

+0

@SchiduLuca Sizeは、渡されたノードのサブツリー上のノードの量を返します。失敗した場合は-1を返すことができます。 –

答えて

1

このチェックは無意味です:

static int rankOf(String s, Node root) { 
    if(root == null) { 
     return -1; 
    } 

    if(root.value.equals(s)) { 
     return size(root); 
    } 

    int result; 
    if(s.compareTo(root.value) > 0) { 
     result = rankOf(s, root.right); 
    } else { 
     result = rankOf(s, root.left); 
    } 
    return result; 
} 

そして、あなたのsize()方法:String場合

static int size(Node root) { 
    if(root == null) return 0; 
    return size(root.left) + size(root.right) + 1; 
} 

ではありません

とにかく
if (n.left != null){ 
    return size(n.left); 
} 

、あなたはこのような何かを行うことができます見つかった場合、-1が返されます。